/*
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2, or (at your option)
 * any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package l1j.server.server.clientpackets;

import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Random;
import java.util.TimeZone;
import java.util.logging.Logger;
import java.util.logging.Level;

import l1j.server.Config;
import l1j.server.server.ActionCodes;
import l1j.server.server.ClientThread;
import l1j.server.server.GMCommands;
import l1j.server.server.datatables.CharacterTable;
import l1j.server.server.datatables.ItemTable;
import l1j.server.server.datatables.LetterTable;
import l1j.server.server.datatables.LogEnchantTable;
import l1j.server.server.datatables.PolyTable;
import l1j.server.server.datatables.SkillsTable;
import l1j.server.server.model.Getback;
import l1j.server.server.model.L1CastleLocation;
import l1j.server.server.model.L1Character;
import l1j.server.server.model.L1Clan;
import l1j.server.server.model.L1HouseLocation;
import l1j.server.server.model.L1Inventory;
import l1j.server.server.model.L1ItemDelay;
import l1j.server.server.model.L1Object;
import l1j.server.server.model.L1PcInventory;
import l1j.server.server.model.L1PolyMorph;
import l1j.server.server.model.L1Quest;
import l1j.server.server.model.L1Teleport;
import l1j.server.server.model.L1TownLocation;
import l1j.server.server.model.L1World;
import l1j.server.server.model.Instance.L1GuardianInstance;
import l1j.server.server.model.Instance.L1ItemInstance;
import l1j.server.server.model.Instance.L1MonsterInstance;
import l1j.server.server.model.Instance.L1NpcInstance;
import l1j.server.server.model.Instance.L1PcInstance;
import l1j.server.server.model.Instance.L1PetInstance;
import l1j.server.server.model.Instance.L1TowerInstance;
import l1j.server.server.model.item.L1ItemId;
import l1j.server.server.model.skill.L1SkillUse;
import l1j.server.server.serverpackets.S_AddSkill;
import l1j.server.server.serverpackets.S_AttackPacket;
import l1j.server.server.serverpackets.S_AttackStatus;
import l1j.server.server.serverpackets.S_ChangeShape;
import l1j.server.server.serverpackets.S_CharVisualUpdate;
import l1j.server.server.serverpackets.S_CurseBlind;
import l1j.server.server.serverpackets.S_DeleteInventoryItem;
import l1j.server.server.serverpackets.S_DoActionGFX;
import l1j.server.server.serverpackets.S_InvList;
import l1j.server.server.serverpackets.S_ItemColor;
import l1j.server.server.serverpackets.S_Letter;
import l1j.server.server.serverpackets.S_Liquor;
import l1j.server.server.serverpackets.S_Message_YN;
import l1j.server.server.serverpackets.S_NPCTalkReturn;
import l1j.server.server.serverpackets.S_OwnCharAttrDef;
import l1j.server.server.serverpackets.S_OwnCharStatus;
import l1j.server.server.serverpackets.S_OwnCharStatus2;
import l1j.server.server.serverpackets.S_Paralysis;
import l1j.server.server.serverpackets.S_Sound;
import l1j.server.server.serverpackets.S_SPMR;
import l1j.server.server.serverpackets.S_SendInvStatusUpdate;
import l1j.server.server.serverpackets.S_ServerMessage;
import l1j.server.server.serverpackets.S_ShowPolyList;
import l1j.server.server.serverpackets.S_SkillBrave;
import l1j.server.server.serverpackets.S_SkillHaste;
import l1j.server.server.serverpackets.S_SkillIconBlessOfEva;
import l1j.server.server.serverpackets.S_SkillIconGFX;
import l1j.server.server.serverpackets.S_SkillSound;
import l1j.server.server.serverpackets.S_UseMap;
import l1j.server.server.storage.CharactersItemStorage;
import l1j.server.server.templates.L1Armor;
import l1j.server.server.templates.L1BookMark;
import l1j.server.server.templates.L1EtcItem;
import l1j.server.server.templates.L1Item;
import l1j.server.server.templates.L1Skills;
import static l1j.server.server.model.skill.L1SkillId.*;

// Referenced classes of package l1j.server.server.clientpackets:
// ClientBasePacket
//
public class C_RequestItemUSe extends ClientBasePacket {
	private static final String C_REQUEST_ITEM_USE = "[C] C_RequestItemUSe";
	private static Logger _log = Logger.getLogger(C_RequestItemUSe.class
			.getName());

	public C_RequestItemUSe(byte abyte0[], ClientThread client)
			throws Exception {
		super(abyte0);
		int itemObjid = readD();

		L1PcInstance pc = client.getActiveChar();
		if (pc.isGhost()) {
			return;
		}
		L1ItemInstance l1iteminstance = pc.getInventory().getItem(itemObjid);

		int pcObjid = pc.getId();
		if (pc.isTeleport()) { // テレポート処理中
			return;
		}
		if (l1iteminstance == null && pc.isDead() == true) {
			return;
		}
		int itemId;
		try {
			itemId = l1iteminstance.getItem().getItemId();
		} catch (Exception e) {
			return;
		}
		int l = 0;

		String s = "";
		int bmapid = 0;
		int btele = 0;
		int blanksc_skillid = 0;
		int spellsc_objid = 0;
		int resid = 0;
		int letterCode = 0;
		String letterReceiver = "";
		byte[] letterText = null;

		if (itemId == 40088 || itemId == 40096 || itemId == 140088) {
			s = readS();
		} else if (itemId == L1ItemId.SCROLL_OF_ENCHANT_ARMOR
				|| itemId == L1ItemId.SCROLL_OF_ENCHANT_WEAPON
				|| itemId == 40077 || itemId == 40078 || itemId == 40126
				|| itemId == 40098 || itemId == 40129 || itemId == 40130
				|| itemId == 140129 || itemId == 140130
				|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_ARMOR
				|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_WEAPON
				|| itemId == L1ItemId.C_SCROLL_OF_ENCHANT_ARMOR
				|| itemId == L1ItemId.C_SCROLL_OF_ENCHANT_WEAPON
				|| itemId == 40007 || itemId == 40008 || itemId == 40317
				|| itemId == 40410 || itemId == 140008 || itemId == 41036) {
			l = readD();
		} else if (itemId == 140100 || itemId == 40100 || itemId == 40099
				|| itemId == 40086 || itemId == 40863) {
			bmapid = readH();
			btele = readD();
			pc.sendPackets(new S_Paralysis(S_Paralysis.TYPE_TELEPORT_UNLOCK,
					false));
		} else if (itemId == 40090 || itemId == 40091 || itemId == 40092
				|| itemId == 40093 || itemId == 40094) { // ブランク
			// スクロール(Lv1)～(Lv5)
			blanksc_skillid = readC();
		} else if (itemId == 40859
				|| itemId == 40862
				|| itemId == 40864
				|| itemId == 40865 // スペルスクロール
				|| itemId == 40866 || itemId == 40867 || itemId == 40869
				|| itemId == 40873 || itemId == 40874 || itemId == 40875
				|| itemId == 40876 || itemId == 40877 || itemId == 40878
				|| itemId == 40880 || itemId == 40881 || itemId == 40883
				|| itemId == 40884 || itemId == 40885 || itemId == 40887
				|| itemId == 40888 || itemId == 40891 || itemId == 40892
				|| itemId == 40893 || itemId == 40894 || itemId == 40895
				|| itemId == 40896 || itemId == 40898 || itemId == 40868
				|| itemId == 40886 || itemId == 40897 || itemId == 40870
				|| itemId == 40879) {
			spellsc_objid = readD();
		} else if (itemId == 40089 || itemId == 140089) { // 復活スクロール、祝福された
			// 復活スクロール
			resid = readD();
		} else if (itemId == 40310 || itemId == 40311
				|| itemId == 40730 || itemId == 40731 || itemId == 40732) { // 便箋
			letterCode = readH();
			letterReceiver = readS();
			letterText = readByte();
		} else {
			l = readC();
		}

		if (pc.getCurrentHp() > 0) {
			int delay_id = 0;
			if (l1iteminstance.getItem().getType2() == 0) {// 種別：その他のアイテム
				delay_id = ((L1EtcItem) l1iteminstance.getItem()).get_delayid();
			}
			if (delay_id != 0) { // ディレイ設定あり
				if (pc.hasItemDelay(delay_id) == true) {
					return;
				}
			}

			// 再使用チェック
			boolean isDelayEffect = false;
			if (l1iteminstance.getItem().getType2() == 0) {
				int delayEffect = ((L1EtcItem) l1iteminstance.getItem())
						.get_delayEffect();
				if (delayEffect > 0) {
					isDelayEffect = true;
					Timestamp lastUsed = l1iteminstance.getLastUsed();
					if (lastUsed != null) {
						Calendar cal = Calendar.getInstance();
						if ((cal.getTimeInMillis() - lastUsed.getTime()) / 1000 <= delayEffect) {
							// \f1何も起きませんでした。
							pc.sendPackets(new S_ServerMessage(79));
							return;
						}
					}
				}
			}

			L1ItemInstance l1iteminstance1 = pc.getInventory().getItem(l);
			_log.finest("request item use (obj) = " + itemObjid + " action = "
					+ l + " value = " + s);
			if (itemId == 40077 || itemId == L1ItemId.SCROLL_OF_ENCHANT_WEAPON
					|| itemId == 40130 || itemId == 140130
					|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_WEAPON
					|| itemId == L1ItemId.C_SCROLL_OF_ENCHANT_WEAPON) { // 武器強化スクロール
				if (l1iteminstance1 != null
						&& l1iteminstance1.getItem().getType2() == 1) {
					int item_id = l1iteminstance1.getItem().getItemId();
					int item_type = l1iteminstance1.getItem().getType2();
					int safe_enchant = l1iteminstance1.getItem()
							.get_safeenchant();
					int enchant_level = l1iteminstance1.getEnchantLevel();

					if (safe_enchant < 0) { // 強化不可
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					} else if (item_type == 1) {
						if (itemId == L1ItemId.C_SCROLL_OF_ENCHANT_WEAPON) { // c-dai
							pc.getInventory().removeItem(l1iteminstance, 1);
							if (enchant_level < -6) {
								// -7以上はできない。
								FailureEnchant(pc, l1iteminstance1, client);
							} else {
								SuccessEnchant(pc, l1iteminstance1, client, -1);
							}
						} else if (enchant_level < safe_enchant) {
							pc.getInventory().removeItem(l1iteminstance, 1);
							SuccessEnchant(pc, l1iteminstance1, client,
									RandomELevel(l1iteminstance1, itemId));
						} else {
							pc.getInventory().removeItem(l1iteminstance, 1);

							int rnd = L1Character.getRnd().nextInt(100) + 1;
							int enchant_chance_wepon;
							if (enchant_level >= 9) {
								enchant_chance_wepon = (100 + 3 * Config.ENCHANT_CHANCE_WEAPON) / 6;
							} else {
								enchant_chance_wepon = (100 + 3 * Config.ENCHANT_CHANCE_WEAPON) / 3;
							}

							if (rnd < enchant_chance_wepon) {
								int randomEnchantLevel = RandomELevel(
										l1iteminstance1, itemId);
								SuccessEnchant(pc, l1iteminstance1, client,
										randomEnchantLevel);
							} else if (enchant_level >= 9
									&& rnd < (enchant_chance_wepon * 2)) {
								String item_name_id = l1iteminstance1
										.get_itemnameid();
								String pm = "";
								String msg = "";
								if (enchant_level > 0) {
									pm = "+";
								}
								msg = pm + l1iteminstance1.getEnchantLevel()
										+ " " + item_name_id;
								// \f1%0が%2と強烈に%1光りましたが、幸い無事にすみました。
								pc.sendPackets(new S_ServerMessage(160, msg,
										"$245", "$248"));
							} else {
								FailureEnchant(pc, l1iteminstance1, client);
							}
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else {
					pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
				}
			} else if (itemId == 40078
					|| itemId == L1ItemId.SCROLL_OF_ENCHANT_ARMOR
					|| itemId == 40129 || itemId == 140129
					|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_ARMOR
					|| itemId == L1ItemId.C_SCROLL_OF_ENCHANT_ARMOR) { // 防具強化スクロール
				if (l1iteminstance1 != null
						&& l1iteminstance1.getItem().getType2() == 2) {
					int item_id = l1iteminstance1.getItem().getItemId();
					int item_type = l1iteminstance1.getItem().getType2();
					int safe_enchant = ((L1Armor) l1iteminstance1.getItem())
							.get_safeenchant();
					int enchant_level = l1iteminstance1.getEnchantLevel();
					if (safe_enchant < 0) { // 強化不可
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					} else if (item_type == 2) {
						int j8 = l1iteminstance1.getItem().getType();
						if (j8 != 0 && j8 != 8 && j8 != 9 && j8 != 10) {
							if (itemId == L1ItemId.C_SCROLL_OF_ENCHANT_ARMOR) { // c-zel
								pc.getInventory().removeItem(l1iteminstance, 1);
								if (enchant_level < -6) {
									// -7以上はできない。
									FailureEnchant(pc, l1iteminstance1, client);
								} else {
									SuccessEnchant(pc, l1iteminstance1, client,
											-1);
								}
							} else if (enchant_level < safe_enchant) {
								pc.getInventory().removeItem(l1iteminstance, 1);
								SuccessEnchant(pc, l1iteminstance1, client,
										RandomELevel(l1iteminstance1, itemId));
							} else {
								pc.getInventory().removeItem(l1iteminstance, 1);
								int rnd = L1PcInstance.getRnd().nextInt(100) + 1;
								int enchant_chance_armor;
								int enchant_level_tmp;
								if (safe_enchant == 0) { // 骨、ブラックミスリル用補正
									enchant_level_tmp = enchant_level + 2;
								} else {
									enchant_level_tmp = enchant_level;
								}
								if (enchant_level >= 9) {
									enchant_chance_armor = (100 + enchant_level_tmp
											* Config.ENCHANT_CHANCE_ARMOR)
											/ (enchant_level_tmp * 2);
								} else {
									enchant_chance_armor = (100 + enchant_level_tmp
											* Config.ENCHANT_CHANCE_ARMOR)
											/ enchant_level_tmp;
								}

								if (rnd < enchant_chance_armor) {
									int randomEnchantLevel = RandomELevel(
											l1iteminstance1, itemId);
									SuccessEnchant(pc, l1iteminstance1, client,
											randomEnchantLevel);
								} else if (enchant_level >= 9
										&& rnd < (enchant_chance_armor * 2)) {
									String item_name_id = l1iteminstance1
											.get_itemnameid();
									String pm = "";
									String msg = "";
									if (enchant_level > 0) {
										pm = "+";
									}
									msg = (new StringBuilder()).append(
											pm + enchant_level).append(" ")
											.append(item_name_id).toString();
									// \f1%0が%2と強烈に%1光りましたが、幸い無事にすみました。
									pc.sendPackets(new S_ServerMessage(160,
											msg, "$252", "$248"));
								} else {
									FailureEnchant(pc, l1iteminstance1, client);
								}
							}
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else {
					pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
				}
			} else if (l1iteminstance.getItem().getType2() == 0) { // 種別：その他のアイテム
				int item_minlvl = ((L1EtcItem) l1iteminstance.getItem())
						.getMinLevel();
				int item_maxlvl = ((L1EtcItem) l1iteminstance.getItem())
						.getMaxLevel();
				if (item_minlvl != 0 && item_minlvl > pc.getLevel()
						&& pc.getAccessLevel() != 200) {
					pc.sendPackets(new S_ServerMessage(318, String
							.valueOf(item_minlvl))); // このアイテムは%0レベル以上にならなければ使用できません。
					return;
				} else if (item_maxlvl != 0 && item_maxlvl < pc.getLevel()
						&& pc.getAccessLevel() != 200) {
					pc.sendPackets(new S_ServerMessage(673, String
							.valueOf(item_maxlvl))); // このアイテムは%dレベル以上のみ使用できます。
					return;
				}

				if (l1iteminstance.getItem().getType() == 0) { // アロー
					pc.getInventory().setArrow(
							l1iteminstance.getItem().getItemId());
					pc.sendPackets(new S_ServerMessage(452, l1iteminstance
							.getLogName())); // %0が選択されました。
				} else if (l1iteminstance.getItem().getType() == 15) { // スティング
					pc.getInventory().setSting(
							l1iteminstance.getItem().getItemId());
					pc.sendPackets(new S_ServerMessage(452, // %0が選択されました。
							l1iteminstance.getLogName()));
				} else if (itemId == 43000) { // 復活のポーション（Lv99キャラのみが使用可能/Lv1に戻る効果）
					pc.setExp(1);
					pc.resetLevel();
					pc.setBonusStats(0);
					pc.sendPackets(new S_SkillSound(pcObjid, 191));
					pc.broadcastPacket(new S_SkillSound(pcObjid, 191));
					pc.sendPackets(new S_OwnCharStatus(pc));
					pc.getInventory().removeItem(l1iteminstance, 1);
					pc.sendPackets(new S_ServerMessage(822)); // 独自アイテムですので、メッセージは適当です。
					pc.save(); // DBにキャラクター情報を書き込む
				} else if (itemId == 40033) { // エリクサー:腕力
					if (pc.getBaseStr() < 25 && pc.getElixirStats() < 5) {
						pc.addBaseStr((byte) 1); // 素のSTR値に+1
						pc.setElixirStats(pc.getElixirStats() + 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_OwnCharStatus2(pc));
						pc.save();
						; // DBにキャラクター情報を書き込む
					} else {
						pc.sendPackets(new S_ServerMessage(481)); // \f1一つの能力値の最大値は25です。他の能力値を選択してください。
					}
				} else if (itemId == 40034) { // エリクサー:体力
					if (pc.getBaseCon() < 25 && pc.getElixirStats() < 5) {
						pc.addBaseCon((byte) 1); // 素のCON値に+1
						pc.setElixirStats(pc.getElixirStats() + 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_OwnCharStatus2(pc));
						pc.save();
						; // DBにキャラクター情報を書き込む
					} else {
						pc.sendPackets(new S_ServerMessage(481)); // \f1一つの能力値の最大値は25です。他の能力値を選択してください。
					}
				} else if (itemId == 40035) { // エリクサー:機敏
					if (pc.getBaseDex() < 25 && pc.getElixirStats() < 5) {
						pc.addBaseDex((byte) 1); // 素のDEX値に+1
						pc.resetBaseAc();
						pc.setElixirStats(pc.getElixirStats() + 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_OwnCharStatus2(pc));
						pc.save();
						; // DBにキャラクター情報を書き込む
					} else {
						pc.sendPackets(new S_ServerMessage(481)); // \f1一つの能力値の最大値は25です。他の能力値を選択してください。
					}
				} else if (itemId == 40036) { // エリクサー:知力
					if (pc.getBaseInt() < 25 && pc.getElixirStats() < 5) {
						pc.addBaseInt((byte) 1); // 素のINT値に+1
						pc.setElixirStats(pc.getElixirStats() + 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_OwnCharStatus2(pc));
						pc.save();
						; // DBにキャラクター情報を書き込む
					} else {
						pc.sendPackets(new S_ServerMessage(481)); // \f1一つの能力値の最大値は25です。他の能力値を選択してください。
					}
				} else if (itemId == 40037) { // エリクサー:精神
					if (pc.getBaseWis() < 25 && pc.getElixirStats() < 5) {
						pc.addBaseWis((byte) 1); // 素のWIS値に+1
						pc.resetBaseMr();
						pc.setElixirStats(pc.getElixirStats() + 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_OwnCharStatus2(pc));
						pc.save();
						; // DBにキャラクター情報を書き込む
					} else {
						pc.sendPackets(new S_ServerMessage(481)); // \f1一つの能力値の最大値は25です。他の能力値を選択してください。
					}
				} else if (itemId == 40038) { // エリクサー:魅力
					if (pc.getBaseCha() < 25 && pc.getElixirStats() < 5) {
						pc.addBaseCha((byte) 1); // 素のCHA値に+1
						pc.setElixirStats(pc.getElixirStats() + 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_OwnCharStatus2(pc));
						pc.save();
						; // DBにキャラクター情報を書き込む
					} else {
						pc.sendPackets(new S_ServerMessage(481)); // \f1一つの能力値の最大値は25です。他の能力値を選択してください。
					}
				}
				// レッドポーション、濃縮体力回復剤、象牙の塔の体力回復剤
				else if (itemId == L1ItemId.POTION_OF_HEALING
						|| itemId == L1ItemId.CONDENSED_POTION_OF_HEALING
						|| itemId == 40029) {
					UseHeallingPotion(pc, 15, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40022) { // 古代の体力回復剤
					UseHeallingPotion(pc, 20, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_EXTRA_HEALING
						|| itemId == L1ItemId.CONDENSED_POTION_OF_EXTRA_HEALING) {
					UseHeallingPotion(pc, 45, 194);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40023) { // 古代の高級体力回復剤
					UseHeallingPotion(pc, 30, 194);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_GREATER_HEALING
						|| itemId == L1ItemId.CONDENSED_POTION_OF_GREATER_HEALING) {
					UseHeallingPotion(pc, 75, 197);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40024) { // 古代の強力体力回復剤
					UseHeallingPotion(pc, 55, 197);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40506) { // エントの実
					UseHeallingPotion(pc, 70, 197);
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId == 40026 || itemId == 40027
						|| itemId == 40028) { // ジュース
					UseHeallingPotion(pc, 25, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40058) { // きつね色のパン
					UseHeallingPotion(pc, 30, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40071) { // 黒こげのパン
					UseHeallingPotion(pc, 70, 197);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40734) { // 信頼のコイン
					UseHeallingPotion(pc, 50, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.B_POTION_OF_HEALING) {
					UseHeallingPotion(pc, 25, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.C_POTION_OF_HEALING) {
					UseHeallingPotion(pc, 10, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.B_POTION_OF_EXTRA_HEALING) { // 祝福されたオレンジ
					// ポーション
					UseHeallingPotion(pc, 55, 194);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.B_POTION_OF_GREATER_HEALING) { // 祝福されたクリアー
					// ポーション
					UseHeallingPotion(pc, 85, 197);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 140506) { // 祝福されたエントの実
					UseHeallingPotion(pc, 80, 197);
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId == 40858) { // liquor（酒）
					pc.setDrink(true);
					pc.sendPackets(new S_Liquor(pc.getId()));
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_CURE_POISON
						|| itemId == 40507) { // シアンポーション、エントの枝
					if (pc.hasSkillEffect(71) == true) { // ディケイポーションの状態
						pc.sendPackets(new S_ServerMessage(698)); // 魔力によって何も飲むことができません。
					} else {
						CancelAbsoluteBarrier(pc); // アブソルート バリアの解除
						pc.sendPackets(new S_SkillSound(pc.getId(), 192));
						pc.broadcastPacket(new S_SkillSound(pc.getId(), 192));
						if (itemId == L1ItemId.POTION_OF_CURE_POISON) {
							pc.getInventory().removeItemOnlyInventory(
									l1iteminstance, 1);
						} else if (itemId == 40507) {
							pc.getInventory().removeItem(l1iteminstance, 1);
						}

						pc.curePoison();
					}
				} else if (itemId == L1ItemId.POTION_OF_HASTE_SELF
						|| itemId == L1ItemId.B_POTION_OF_HASTE_SELF
						|| itemId == 40018 // 強化グリーン ポーション
						|| itemId == 140018 // 祝福された強化グリーン ポーション
						|| itemId == 40039 // ワイン
						|| itemId == 40040 // ウイスキー
						|| itemId == 40030) { // 象牙の塔のヘイスト ポーション
					useGreenPotion(pc, itemId);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_EMOTION_BRAVERY // ブレイブ
						// ポーション
						|| itemId == L1ItemId.B_POTION_OF_EMOTION_BRAVERY) { // 祝福されたブレイブ
					// ポーション
					if (pc.isKnight()) {
						useBravePotion(pc, itemId);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40068 // エルヴン ワッフル
						|| itemId == 140068) { // 祝福されたエルヴン ワッフル
					if (pc.isElf()) {
						useBravePotion(pc, itemId);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40031) { // イビル ブラッド
					if (pc.isCrown()) {
						useBravePotion(pc, itemId);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40733) { // 名誉のコイン
					useBravePotion(pc, itemId);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40066) { // お餅
					pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
					pc.setCurrentMp(pc.getCurrentMp() + 20);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40067) { // よもぎ餅
					pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
					pc.setCurrentMp(pc.getCurrentMp() + 50);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40735) { // 勇気のコイン
					pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
					pc.setCurrentMp(pc.getCurrentMp() + 60);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40042) { // スピリットポーション
					pc.sendPackets(new S_ServerMessage(338, "$1084")); // あなたの%0が回復していきます。
					pc.setCurrentMp(pc.getCurrentMp() + 50);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40043) { // 兎の肝
					UseHeallingPotion(pc, 600, 189);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40032 || itemId == 40041) { // エヴァの祝福＆マーメイドの鱗
					useBlessOfEva(pc, itemId);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_MANA // ブルー ポーション
						|| itemId == L1ItemId.B_POTION_OF_MANA // 祝福されたブルー
						// ポーション
						|| itemId == 40736) { // 知恵のコイン
					useBluePotion(pc, itemId);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_EMOTION_WISDOM // ウィズダム
						// ポーション
						|| itemId == L1ItemId.B_POTION_OF_EMOTION_WISDOM) { // 祝福されたウィズダム
					// ポーション
					if (pc.isWizard()) {
						useWisdomPotion(pc, itemId);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == L1ItemId.POTION_OF_BLINDNESS) { // オペイクポーション
					useBlindPotion(pc);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40088 // 変身スクロール
						|| itemId == 40096 // 象牙の塔の変身スクロール
						|| itemId == 140088) { // 祝福された変身スクロール
					if (usePolyScroll(pc, itemId, s)) {
						pc.getInventory().removeItemOnlyInventory(
								l1iteminstance, 1);
					} else {
						pc.sendPackets(new S_ServerMessage(181)); // \f1そのようなモンスターには変身できません。
					}
				} else if (itemId == 41154 // 闇の鱗
						|| itemId == 41155 // 烈火の鱗
						|| itemId == 41156 // 背徳者の鱗
						|| itemId == 41157) { // 憎悪の鱗
					usePolyScale(pc, itemId);
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId == 40317) { // 砥石
					// 武器か防具の場合のみ
					if (l1iteminstance1.getItem().getType2() != 0
							&& l1iteminstance1.get_durability() > 0) {
						String msg0;
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.getInventory().recoveryDamage(l1iteminstance1);
						msg0 = l1iteminstance1.getViewMessageName();
						if (l1iteminstance1.get_durability() == 0) {
							pc.sendPackets(new S_ServerMessage(464, msg0)); // %0%sは新品同様の状態になりました。
						} else {
							pc.sendPackets(new S_ServerMessage(463, msg0)); // %0の状態が良くなりました。
						}
					} else {
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40097 || itemId == 40119
						|| itemId == 140119 || itemId == 140329) { // 解呪スクロール、原住民のトーテム
					for (L1ItemInstance eachItem : pc.getInventory().getItems()) {
						if (eachItem.getItem().getBless() != 2) {
							continue;
						}
						if (!eachItem.isEquipped()
								&& (itemId == 40119 || itemId == 40097)) {
							// n解呪は装備しているものしか解呪しない
							continue;
						}
						int id = eachItem.getItemId();
						if ((id == 220293 || id == 220294 || id == 220295 || id == 220296)
								&& itemId != 140329) {
							// 呪われたXXXリングは原住民のトーテムでしか解呪できない
							continue;
						}
						L1Item temp = ItemTable.getInstance().getTemplate(
								eachItem.getItemId() - 200000);
						if (temp != null) {
							eachItem.setItem(temp);
							pc.sendPackets(new S_ItemColor(eachItem, 1));
							pc.getInventory().updateItem(eachItem,
									L1PcInventory.COL_ITEMID);
						}
					}
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
					pc.sendPackets(new S_ServerMessage(155)); // \f1誰かが助けてくれたようです。
				} else if (itemId == 40126 || itemId == 40098) { // 確認スクロール
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
					String item_bless = "";
					if (l1iteminstance1.getItem().getBless() == 0) {
						item_bless = "$227 ";
					} else if (l1iteminstance1.getItem().getBless() == 2) {
						item_bless = "$228 ";
					}
					if (!l1iteminstance1.isIdentified()) {
						l1iteminstance1.setIdentified(true);
						pc.getInventory().updateItem(l1iteminstance1, 2);
						pc.sendPackets(new S_DeleteInventoryItem(pc,
								l1iteminstance1));
						pc.sendPackets(new S_InvList(pc, l1iteminstance1));
						pc.sendPackets(new S_SendInvStatusUpdate(pc,
								l1iteminstance1));
					}
					String item_name = l1iteminstance1.get_itemnameid();
					int item_weight = (l1iteminstance1.getItem().getWeight() * l1iteminstance1
							.getCount()) / 1000;
					int enchantlevel = l1iteminstance1.getEnchantLevel();
					switch (l1iteminstance1.getItem().getType2()) {
					case 1: // 武器
						int s1 = l1iteminstance1.getItem().getDmgSmall();
						int s2 = l1iteminstance1.getItem().getDmgLarge();
						pc
								.sendPackets(new S_ServerMessage( // \f1%0：小さなモンスター打撃%1
										// 大きなモンスター打撃%2
										134, item_bless + item_name, s1 + "+"
												+ enchantlevel, s2 + "+"
												+ enchantlevel));
						break;
					case 2: // 防具
						int a1 = l1iteminstance1.getItem().get_ac();
						pc.sendPackets(new S_ServerMessage( // \f1%0：防御力%1
								// 防御具
								135, item_bless + item_name, a1 + "+"
										+ enchantlevel));
						break;
					default:
						pc.sendPackets(new S_ServerMessage( // \f1%0：［重さ%1
								138, item_bless + item_name, String
										.valueOf(item_weight)));
					}
				} else if (itemId == 41036) { // 糊
					int diaryId = l1iteminstance1.getItem().getItemId();
					if (diaryId >= 41038 && 41047 >= diaryId) {
						Random random = new Random();
						if (random.nextInt(100) < 33) {
							createNewItem(pc, diaryId + 10, 1);
						}
						pc.getInventory().removeItem(l1iteminstance1, 1);
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40090 || itemId == 40091
						|| itemId == 40092 || itemId == 40093
						|| itemId == 40094) { // ブランク スクロール(Lv1)～ブランク
					// スクロール(Lv5)
					if (pc.isWizard()) { // ウィザード
						if (itemId == 40090 && blanksc_skillid <= 7 || // ブランク
								// スクロール(Lv1)でレベル1以下の魔法
								itemId == 40091 && blanksc_skillid <= 15 || // ブランク
								// スクロール(Lv2)でレベル2以下の魔法
								itemId == 40092 && blanksc_skillid <= 22 || // ブランク
								// スクロール(Lv3)でレベル3以下の魔法
								itemId == 40093 && blanksc_skillid <= 31 || // ブランク
								// スクロール(Lv4)でレベル4以下の魔法
								itemId == 40094 && blanksc_skillid <= 39) { // ブランク
							// スクロール(Lv5)でレベル5以下の魔法
							L1ItemInstance spellsc = ItemTable.getInstance()
									.createItem(40859 + blanksc_skillid);
							if (spellsc != null) {
								if (pc.getInventory().checkAddItem(spellsc, 1) == L1Inventory.OK) {
									L1Skills l1skills = SkillsTable
											.getInstance().getTemplate(
													blanksc_skillid + 1); // blanksc_skillidは0始まり
									if (pc.getCurrentHp() + 1 < l1skills
											.getHpConsume() + 1) {
										pc
												.sendPackets(new S_ServerMessage(
														279)); // \f1HPが不足していて魔法を使うことができません。
										return;
									}
									if (pc.getCurrentMp() < l1skills
											.getMpConsume()) {
										pc
												.sendPackets(new S_ServerMessage(
														278)); // \f1MPが不足していて魔法を使うことができません。
										return;
									}
									if (l1skills.getItemConsumeId() != 0) { // 材料が必要
										if (!pc.getInventory().checkItem(
												l1skills.getItemConsumeId(),
												l1skills.getItemConsumeCount())) { // 必要材料をチェック
											pc.sendPackets(new S_ServerMessage(
													299)); // \f1魔法を詠唱するための材料が足りません。
											return;
										}
									}
									pc.setCurrentHp(pc.getCurrentHp()
											- l1skills.getHpConsume());
									pc.setCurrentMp(pc.getCurrentMp()
											- l1skills.getMpConsume());
									int lawful = pc.getLawful()
											+ l1skills.getLawful();
									if (lawful > 32767) {
										lawful = 32767;
									}
									if (lawful < -32767) {
										lawful = -32767;
									}
									pc.setLawful(lawful);
									if (l1skills.getItemConsumeId() != 0) { // 材料が必要
										pc.getInventory().consumeItem(
												l1skills.getItemConsumeId(),
												l1skills.getItemConsumeCount());
									}
									pc.getInventory().removeItem(
											l1iteminstance, 1);
									pc.getInventory().storeItem(spellsc);
								}
							}
						}
					} else {
						pc.sendPackets(new S_ServerMessage(264)); // \f1あなたのクラスではこのアイテムは使用できません。
					}
				} else if (itemId >= 40859 && itemId <= 40862
						|| itemId >= 40864 && itemId <= 40881
						|| itemId >= 40883 && itemId <= 40898) { // スペルスクロール（40863：はテレポートスクロールとして処理する）
					if (pc.getId() == spellsc_objid && // ターゲットが自分自身
							(itemId == 40862 || itemId == 40864
									|| itemId == 40865 || itemId == 40868
									|| itemId == 40869 || itemId == 40873
									|| itemId == 40874 || itemId == 40875
									|| itemId == 40876 || itemId == 40878
									|| itemId == 40880 || itemId == 40881
									|| itemId == 40883 || itemId == 40885
									|| itemId == 40886 || itemId == 40887
									|| itemId == 40888 || itemId == 40891
									|| itemId == 40892 || itemId == 40894
									|| itemId == 40896 || itemId == 40897 || itemId == 40898)) {
						pc.sendPackets(new S_ServerMessage(281)); // \f1魔法が無効になりました。
					} else {
						CancelAbsoluteBarrier(pc); // アブソルート バリアの解除
						int skillid = itemId - 40858;
						if (skillid == 15) {// ファイアー アローとスタラックはskillidが並び順ではない
							skillid = 16;
						} else if (skillid == 16) {
							skillid = 15;
						}
						L1SkillUse l1skilluse = new L1SkillUse();
						l1skilluse.handleCommands(client.getActiveChar(),
								skillid, spellsc_objid, 0, 0, null, 0,
								L1SkillUse.TYPE_SPELLSC);
						pc.getInventory().removeItemOnlyInventory(
								l1iteminstance, 1);
					}
				} else if (itemId >= 40373 && itemId <= 40382 // 地図各種
						|| itemId >= 40385 && itemId <= 40390) {
					pc.sendPackets(new S_UseMap(pc, l1iteminstance.getId(),
							l1iteminstance.getItem().getItemId()));
				} else if (itemId == 40310 || itemId == 40730
						|| itemId == 40731 || itemId == 40732) { // 便箋(未使用)
					if (writeLetter(itemId, pc, letterCode, letterReceiver,
							letterText)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40311) { // 血盟便箋(未使用)
					if (writeClanLetter(itemId, pc, letterCode, letterReceiver,
							letterText)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49016 || itemId == 49018
						|| itemId == 49020 || itemId == 49022
						|| itemId == 49024) { // 便箋(未開封)
					pc.sendPackets(new S_Letter(l1iteminstance));
					l1iteminstance.setItemId(itemId + 1);
					pc.getInventory().updateItem(l1iteminstance,
							L1PcInventory.COL_ITEMID);
				} else if (itemId == 49017 || itemId == 49019
						|| itemId == 49021 || itemId == 49023
						|| itemId == 49025) { // 便箋(開封済み)
					pc.sendPackets(new S_Letter(l1iteminstance));
				} else if (itemId == 40315) { // ペットの笛
					pc.sendPackets(new S_Sound(437));
					pc.broadcastPacket(new S_Sound(437));
					Object[] petList = pc.getPetList().values().toArray();
					for (Object petObject : petList) {
						if (petObject instanceof L1PetInstance) { // ペット
							L1PetInstance pet = (L1PetInstance) petObject;
							pet.call();
						}
					}
				} else if (itemId == 40493) { // マジックフルート
					pc.sendPackets(new S_Sound(165));
					pc.broadcastPacket(new S_Sound(165));
					for (L1Object visible : L1World.getInstance()
							.getVisibleObjects(pc)) {
						if (visible instanceof L1GuardianInstance) {
							L1GuardianInstance guardian = (L1GuardianInstance) visible;
							if (guardian.getNpcTemplate().get_npcId() == 70850) { // パン
								if (createNewItem(pc, 88, 1)) {
									pc.getInventory().removeItem(
											l1iteminstance, 1);
								}
							}
						}
					}
				} else if (itemId == 40325) { // 2面コイン
					if (pc.getInventory().checkItem(40318, 1)) {
						Random random = new Random();
						int gfxid = 3237 + random.nextInt(2);
						pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));
						pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));
						pc.getInventory().consumeItemOnlyInventory(40318, 1);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40326) { // 3方向ルーレット
					if (pc.getInventory().checkItem(40318, 1)) {
						Random random = new Random();
						int gfxid = 3241 + random.nextInt(3);
						pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));
						pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));
						pc.getInventory().consumeItemOnlyInventory(40318, 1);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40327) { // 4方向ルーレット
					if (pc.getInventory().checkItem(40318, 1)) {
						Random random = new Random();
						int gfxid = 3241 + random.nextInt(4);
						pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));
						pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));
						pc.getInventory().consumeItemOnlyInventory(40318, 1);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40328) { // 6面ダイス
					if (pc.getInventory().checkItem(40318, 1)) {
						Random random = new Random();
						int gfxid = 3204 + random.nextInt(6);
						pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));
						pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));
						pc.getInventory().consumeItemOnlyInventory(40318, 1);
					} else {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId == 40089 || itemId == 140089) { // 復活スクロール、祝福された復活スクロール
					L1Character resobject = (L1Character) L1World.getInstance()
							.findObject(resid);
					if (resobject != null) {
						if (resobject instanceof L1PcInstance) {
							L1PcInstance target = (L1PcInstance) resobject;
							if (pc.getId() == target.getId()) {
								return;
							}
							if (target.getCurrentHp() == 0
									&& target.isDead() == true) {
								if (pc.getMap().isUseResurrection()) {
									target.setTempID(pc.getId());
									if (itemId == 40089) {
										// また復活したいですか？（Y/N）
										target.sendPackets(new S_Message_YN(
												321, ""));
									} else if (itemId == 140089) {
										// また復活したいですか？（Y/N）
										target.sendPackets(new S_Message_YN(
												322, ""));
									}
								} else {
									return;
								}
							}
						} else if (resobject instanceof L1NpcInstance) {
							if (!(resobject instanceof L1TowerInstance)) {
								L1NpcInstance npc = (L1NpcInstance) resobject;
								if (npc.getCurrentHp() == 0 && npc.isDead()) {
									npc.resurrect(npc.getMaxHp() / 4);
									npc.setResurrect(true);
								}
							}
						}
					}
					pc.getInventory()
							.removeItemOnlyInventory(l1iteminstance, 1);
				} else if (itemId > 40169 && itemId < 40226 || itemId >= 45000
						&& itemId <= 45022) { // 魔法書
					byte byte0 = 0;
					boolean flag1 = false;
					boolean isLawful = true;
					if (itemId == 45000 || itemId == 45008 || itemId == 45018
							|| itemId == 45021 || itemId == 40171
							|| itemId == 40179 || itemId == 40180
							|| itemId == 40182 || itemId == 40194
							|| itemId == 40197 || itemId == 40202
							|| itemId == 40206 || itemId == 40213
							|| itemId == 40220 || itemId == 40222) {
						byte0 = 1;
					}
					if (itemId == 45009 || itemId == 45010 || itemId == 45019
							|| itemId == 40172 || itemId == 40173
							|| itemId == 40178 || itemId == 40185
							|| itemId == 40186 || itemId == 40192
							|| itemId == 40196 || itemId == 40201
							|| itemId == 40204 || itemId == 40211
							|| itemId == 40221 || itemId == 40225) {
						byte0 = 2;
					}
					// ロウフルテンプル
					if ((byte0 == 0 || byte0 == 1)
							&& (pc.getX() > 33116 && pc.getX() < 33128
									&& pc.getY() > 32930 && pc.getY() < 32942
									&& pc.getMapId() == 4 || pc.getX() > 33135
									&& pc.getX() < 33147 && pc.getY() > 32235
									&& pc.getY() < 32247 && pc.getMapId() == 4)) {
						flag1 = true;
						isLawful = true;
					}
					// カオティックテンプル
					if ((byte0 == 0 || byte0 == 2)
							&& (pc.getX() > 32880 && pc.getX() < 32892
									&& pc.getY() > 32646 && pc.getY() < 32658
									&& pc.getMapId() == 4 || pc.getX() > 32662
									&& pc.getX() < 32674 && pc.getY() > 32297
									&& pc.getY() < 32309 && pc.getMapId() == 4)) {
						flag1 = true;
						isLawful = false;
					}
					if (pc.getAccessLevel() == 200) {
						SpellBook(pc, l1iteminstance, client, isLawful);
					} else if (flag1) {
						if (pc.isKnight()) {
							if (itemId >= 45000 && itemId <= 45007
									&& pc.getLevel() >= 50) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45000 && itemId <= 45007) {
								pc.sendPackets(new S_ServerMessage(312));
							} else {
								pc.sendPackets(new S_ServerMessage(79));
							}
						} else if (pc.isCrown() || pc.isDarkelf()) {
							if (itemId >= 45000 && itemId <= 45007
									&& pc.getLevel() >= 10) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45008 && itemId <= 45015
									&& pc.getLevel() >= 20) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45008 && itemId <= 45015
									|| itemId >= 45000 && itemId <= 45007) {
								pc.sendPackets(new S_ServerMessage(312)); // レベルが低くてその魔法を覚えることができません。
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // これも上記の通りです。
							}
						} else if (pc.isElf()) {
							if (itemId >= 45000 && itemId <= 45007
									&& pc.getLevel() >= 8) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45008 && itemId <= 45015
									&& pc.getLevel() >= 16) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45016 && itemId <= 45022
									&& pc.getLevel() >= 24) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40170 && itemId <= 40177
									&& pc.getLevel() >= 32) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40178 && itemId <= 40185
									&& pc.getLevel() >= 40) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40186 && itemId <= 40193
									&& pc.getLevel() >= 48) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45000 && itemId <= 45022
									|| itemId >= 40170 && itemId <= 40193) {
								pc.sendPackets(new S_ServerMessage(312)); // レベルが低くてその魔法を覚えることができません。
							} else {
								pc.sendPackets(new S_ServerMessage(79)); // これも上記の通りです。
							}
						} else if (pc.isWizard()) {
							if (itemId >= 45000 && itemId <= 45007
									&& pc.getLevel() >= 4) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45008 && itemId <= 45015
									&& pc.getLevel() >= 8) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 45016 && itemId <= 45022
									&& pc.getLevel() >= 12) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40170 && itemId <= 40177
									&& pc.getLevel() >= 16) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40178 && itemId <= 40185
									&& pc.getLevel() >= 20) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40186 && itemId <= 40193
									&& pc.getLevel() >= 24) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40194 && itemId <= 40201
									&& pc.getLevel() >= 28) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40202 && itemId <= 40209
									&& pc.getLevel() >= 32) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40210 && itemId <= 40217
									&& pc.getLevel() >= 36) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else if (itemId >= 40218 && itemId <= 40225
									&& pc.getLevel() >= 40) {
								SpellBook(pc, l1iteminstance, client, isLawful);
							} else {
								pc.sendPackets(new S_ServerMessage(312)); // レベルが低くてその魔法を覚えることができません。
							}
						}
					} else if (byte0 == 1) {
						pc.sendPackets(new S_ServerMessage(79)); // カオティック
						// テンプルでロウフル魔法を覚えようとすると魔法書は消え、コール
						// ライトニングのエフェクトが出ます。メッセージは出ません。
					} else if (byte0 == 2) {
						pc.sendPackets(new S_ServerMessage(79)); // ロウフル
						// テンプルでカオティック魔法を覚えようとすると魔法書は消え、コール
						// ライトニングのエフェクトが出ます。メッセージは出ません。
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // 通常の魔法書をテンプル以外で使用しても何のメッセージも表示されません。
					}
				} else if (itemId > 40225 && itemId < 40232) {
					if (pc.isCrown() || pc.getAccessLevel() == 200) {
						if (itemId == 40226 && pc.getLevel() >= 15) {
							SpellBook4(pc, l1iteminstance, client);
						} else if (itemId == 40228 && pc.getLevel() >= 30) {
							SpellBook4(pc, l1iteminstance, client);
						} else if (itemId == 40227 && pc.getLevel() >= 40) {
							SpellBook4(pc, l1iteminstance, client);
						} else if ((itemId == 40231 || itemId == 40232)
								&& pc.getLevel() >= 45) {
							SpellBook4(pc, l1iteminstance, client);
						} else if (itemId == 40230 && pc.getLevel() >= 50) {
							SpellBook4(pc, l1iteminstance, client);
						} else if (itemId == 40229 && pc.getLevel() >= 55) {
							SpellBook4(pc, l1iteminstance, client);
						} else {
							pc.sendPackets(new S_ServerMessage(312)); // LVが低くて
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId >= 40232 && itemId <= 40264 // 精霊の水晶
						|| itemId >= 41149 && itemId <= 41153) {
					if (pc.isElf() || pc.getAccessLevel() == 200) {
						if (itemId >= 40232 && itemId <= 40234
								&& pc.getLevel() >= 10) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40235 && itemId <= 40236
								&& pc.getLevel() >= 20) {
							SpellBook2(pc, l1iteminstance, client);
						}
						if (itemId >= 40237 && itemId <= 40240
								&& pc.getLevel() >= 30) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40241 && itemId <= 40243
								&& pc.getLevel() >= 40) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40244 && itemId <= 40246
								&& pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40247 && itemId <= 40248
								&& pc.getLevel() >= 30) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40249 && itemId <= 40250
								&& pc.getLevel() >= 40) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40251 && itemId <= 40252
								&& pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40253 && itemId <= 40254
								&& pc.getLevel() >= 30) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId == 40255 && pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId == 40256 && pc.getLevel() >= 30) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId == 40257 && pc.getLevel() >= 40) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40258 && itemId <= 40259
								&& pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40260 && itemId <= 40261
								&& pc.getLevel() >= 30) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId == 40262 && pc.getLevel() >= 40) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 40263 && itemId <= 40264
								&& pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 41149 && itemId <= 41150
								&& pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId == 41151 && pc.getLevel() >= 40) {
							SpellBook2(pc, l1iteminstance, client);
						} else if (itemId >= 41152 && itemId <= 41153
								&& pc.getLevel() >= 50) {
							SpellBook2(pc, l1iteminstance, client);
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // (原文:精霊の水晶はエルフのみが習得できます。)
					}
				} else if (itemId > 40264 && itemId < 40280) {
					if (pc.isDarkelf() || pc.getAccessLevel() == 200) {
						if (itemId >= 40265 && itemId <= 40269 // 闇精霊の水晶
								&& pc.getLevel() >= 15) {
							SpellBook1(pc, l1iteminstance, client);
						} else if (itemId >= 40270 && itemId <= 40274 // 闇精霊の水晶
								&& pc.getLevel() >= 30) {
							SpellBook1(pc, l1iteminstance, client);
						} else if (itemId >= 40275 && itemId <= 40279
								&& pc.getLevel() >= 45) {
							SpellBook1(pc, l1iteminstance, client);
						} else {
							pc.sendPackets(new S_ServerMessage(312));
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // (原文:闇精霊の水晶はダークエルフのみが習得できます。)
					}
				} else if (itemId >= 40164 && itemId <= 40166 // 技術書
						|| itemId >= 41147 && itemId <= 41148) {
					if (pc.isKnight() || pc.getAccessLevel() == 200) {
						if (itemId >= 40164 && itemId <= 40165 // スタン、リダクションアーマー
								&& pc.getLevel() >= 50) {
							SpellBook3(pc, l1iteminstance, client);
						} else if (itemId >= 41147 && itemId <= 41148 // ソリッドキャリッジ、カウンターバリア
								&& pc.getLevel() >= 50) {
							SpellBook3(pc, l1iteminstance, client);
						} else if (itemId == 40166 && pc.getLevel() >= 60) { // バウンスアタック
							SpellBook3(pc, l1iteminstance, client);
						} else {
							pc.sendPackets(new S_ServerMessage(312));
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId == 40167 || itemId == 40168
						|| itemId == 40415) { // 古い絹袋/古い皮袋/遺物の袋
					int l1 = 0;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 39) { // きつね色のパン
						l1 = 40058;
					}
					if (k3 >= 40 && k3 <= 69) { // こげ色のパン
						l1 = 40071;
					}
					if (k3 >= 70 && k3 <= 99) { // ケント装備
						l1 = random.nextInt(10) + 40331;
					}
					if (createNewItem(pc, l1, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40330) { // 無限の矢筒
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 79) { // シルバーアロー
						l1 = 40744;
						l2 = 4000;
					}
					if (k3 >= 80 && k3 <= 89) { // ミスリルの矢
						l1 = 40746;
						l2 = 1000;
					}
					if (k3 >= 90 && k3 <= 94) { // ブラックミスリルアロー
						l1 = 40747;
						l2 = 1000;
					}
					if (k3 >= 95 && k3 <= 99) { // オリハルコンアロー
						l1 = 40748;
						l2 = 1000;
					}
					if (!createNewItem(pc, l1, l2)) {
						// 失敗した場合は効果ディレイを入れない
						isDelayEffect = false;
					}
				} else if (itemId == 40416) { // カーズドブラッド
					int l1 = 0;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 15) { // 追放ワンド
						l1 = 40009;
					}
					if (k3 >= 16 && k3 <= 30) { // エボニワンド
						l1 = 40007;
					}
					if (k3 >= 31 && k3 <= 45) { // パインワンド
						l1 = 40006;
					}
					if (k3 >= 46 && k3 <= 60) { // メイプルワンド
						l1 = 40008;
					}
					if (k3 >= 61 && k3 <= 75) { // 黒い血痕
						l1 = 40524;
					}
					if (k3 >= 76 && k3 <= 99) { // イビルブラッド
						l1 = 40031;
					}
					if (!createNewItem(pc, l1, 1)) {
						// 失敗した場合は効果ディレイを入れない
						isDelayEffect = false;
					}
				} else if (itemId == 40414) { // アルケミストストーン
					int l1 = 0;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 8) { // レッドポーション
						l1 = L1ItemId.POTION_OF_HEALING;
					}
					if (k3 >= 9 && k3 <= 16) { // オレンジポーション
						l1 = L1ItemId.POTION_OF_EXTRA_HEALING;
					}
					if (k3 >= 17 && k3 <= 24) { // クリアーポーション
						l1 = L1ItemId.POTION_OF_GREATER_HEALING;
					}
					if (k3 >= 25 && k3 <= 32) { // グリーンポーション
						l1 = L1ItemId.POTION_OF_HASTE_SELF;
					}
					if (k3 >= 33 && k3 <= 40) { // 強化グリーンポーション
						l1 = 40018;
					}
					if (k3 >= 41 && k3 <= 48) { // ウィズダムポーション
						l1 = L1ItemId.POTION_OF_EMOTION_WISDOM;
					}
					if (k3 >= 49 && k3 <= 56) { // ブレイブポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
					}
					if (k3 >= 57 && k3 <= 64) { // シアンポーション
						l1 = L1ItemId.POTION_OF_CURE_POISON;
					}
					if (k3 >= 65 && k3 <= 72) { // オペイクポーション
						l1 = L1ItemId.POTION_OF_BLINDNESS;
					}
					if (k3 >= 73 && k3 <= 80) { // ブルーポーション
						l1 = L1ItemId.POTION_OF_MANA;
					}
					if (k3 >= 81 && k3 <= 88) { // ダークフォレスターポーション
						l1 = 40425;
					}
					if (k3 >= 89 && k3 <= 99) { // スピリットポーション
						l1 = 40042;
					}
					if (!createNewItem(pc, l1, 1)) {
						// 失敗した場合は効果ディレイを入れない
						isDelayEffect = false;
					}
				} else if (itemId == 40079 || itemId == 40095) { // 帰還スクロール
					if (pc.getMap().isEscapable() || pc.isGm()) {
						int[] loc = Getback.GetBack_Location(pc, true);
						L1Teleport.teleport(pc, loc[0], loc[1], (short) loc[2],
								5, true);
						pc.getInventory().removeItemOnlyInventory(
								l1iteminstance, 1);
					} else {
						pc.sendPackets(new S_ServerMessage(647));
						// pc.sendPackets(new
						// S_CharVisualUpdate(pc));
					}
				} else if (itemId == 40124) { // 血盟帰還スクロール
					if (pc.getMap().isEscapable() || pc.isGm()) {
						int castle_id = 0;
						int house_id = 0;
						if (pc.getClanid() != 0) { // クラン所属
							L1Clan clan = L1World.getInstance().getClan(
									pc.getClanname());
							if (clan != null) {
								castle_id = clan.getCastleId();
								house_id = clan.getHouseId();
							}
						}
						if (castle_id != 0) { // 城主クラン員
							if (pc.getMap().isEscapable() || pc.isGm()) {
								int[] loc = new int[3];
								loc = L1CastleLocation.getCastleLoc(castle_id);
								int locx = loc[0];
								int locy = loc[1];
								short mapid = (short) (loc[2]);
								L1Teleport.teleport(pc, locx, locy, mapid, 5,
										true);
								pc.getInventory().removeItemOnlyInventory(
										l1iteminstance, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(647));
							}
						} else if (house_id != 0) { // アジト所有クラン員
							if (pc.getMap().isEscapable() || pc.isGm()) {
								int[] loc = new int[3];
								loc = L1HouseLocation.getHouseLoc(house_id);
								int locx = loc[0];
								int locy = loc[1];
								short mapid = (short) (loc[2]);
								L1Teleport.teleport(pc, locx, locy, mapid, 5,
										true);
								pc.getInventory().removeItemOnlyInventory(
										l1iteminstance, 1);
							} else {
								pc.sendPackets(new S_ServerMessage(647));
							}
						} else {
							if (pc.getHomeTownId() > 0) {
								int[] loc = L1TownLocation.getGetBackLoc(pc
										.getHomeTownId());
								int locx = loc[0];
								int locy = loc[1];
								short mapid = (short) (loc[2]);
								L1Teleport.teleport(pc, locx, locy, mapid, 5,
										true);
								pc.getInventory().removeItemOnlyInventory(
										l1iteminstance, 1);
							} else {
								int[] loc = Getback.GetBack_Location(pc, true);
								L1Teleport.teleport(pc, loc[0], loc[1],
										(short) loc[2], 5, true);
								pc.getInventory().removeItemOnlyInventory(
										l1iteminstance, 1);
							}
						}
					} else {
						pc.sendPackets(new S_ServerMessage(647));
					}
				} else if (itemId == 140100 || itemId == 40100
						|| itemId == 40099 // 祝福されたテレポートスクロール、テレポートスクロール
						|| itemId == 40086 || itemId == 40863) { // スペルスクロール(テレポート)
					L1BookMark bookm = pc.getBookMark(btele);
					if (bookm != null) { // ブックマークを取得出来たらテレポート
						if (pc.getMap().isEscapable() || pc.isGm()) {
							L1Teleport.teleport(pc, bookm.getLocX(), bookm
									.getLocY(), bookm.getMapId(), 5, true);
							pc.getInventory().removeItemOnlyInventory(
									l1iteminstance, 1);
						} else {
							L1Teleport.teleport(pc, pc.getX(), pc.getY(), pc
									.getMapId(), pc.getHeading(), false);
							pc.sendPackets(new S_ServerMessage(79));
						}
					} else {
						if (pc.getMap().isTeleportable() || pc.isGm()) {
							L1Teleport.randomTeleport(pc, true);
							pc.getInventory().removeItemOnlyInventory(
									l1iteminstance, 1);
						} else {
							L1Teleport.teleport(pc, pc.getX(), pc.getY(), pc
									.getMapId(), pc.getHeading(), false);
							pc.sendPackets(new S_ServerMessage(276));
						}
					}
				} else if (itemId >= 40080 && itemId <= 40085
						|| itemId >= 40102 && itemId <= 40118
						|| itemId >= 40120 && itemId <= 40123
						|| itemId == 40125 || itemId >= 40801
						&& itemId <= 40898 || itemId >= 42001
						&& itemId <= 42033 || itemId >= 42035
						&& itemId <= 42100) { // 各種テレポートスクロール
					if (pc.getMap().isEscapable() || pc.isGm()) {
						L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance
								.getItem()).get_locx(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_locy(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_mapid(), 5, true);
						pc.getInventory().removeItemOnlyInventory(
								l1iteminstance, 1);
					} else {
						pc.sendPackets(new S_ServerMessage(647));
					}
				} else if (itemId >= 40901 && itemId <= 40908) { // 各種エンゲージリング
					L1PcInstance partner = null;
					boolean partner_stat = false;
					if (pc.getPartnerId() != 0) { // 結婚中
						partner = (L1PcInstance) L1World.getInstance()
								.findObject(pc.getPartnerId());
						if (partner != null && partner.getPartnerId() != 0
								&& pc.getPartnerId() == partner.getId()
								&& partner.getPartnerId() == pc.getId()) {
							partner_stat = true;
						}
					} else {
						pc.sendPackets(new S_ServerMessage(662)); // \f1あなたは結婚していません。
						return;
					}

					if (partner_stat) {
						boolean castle_area = L1CastleLocation
								.checkInAllWarArea(
								// いずれかの城エリア
										partner.getX(), partner.getY(), partner
												.getMapId());
						if ((partner.getMapId() == 0 || partner.getMapId() == 4 || partner
								.getMapId() == 304)
								&& castle_area == false) {
							L1Teleport.teleport(pc, partner.getX(), partner
									.getY(), partner.getMapId(), 5, true);
						} else {
							pc.sendPackets(new S_ServerMessage(547)); // \f1あなたのパートナーは今あなたが行けない所でプレイ中です。
						}
					} else {
						pc.sendPackets(new S_ServerMessage(546)); // \f1あなたのパートナーは今プレイをしていません。
					}
				} else if (itemId == 40570) { // アリアからの報酬
					if (createNewItem(pc, 20051, 1)
							&& createNewItem(pc, 40228, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40568) { // 神秘の袋
					if (createNewItem(pc, 40576, 1)
							&& createNewItem(pc, 40577, 1)
							&& createNewItem(pc, 40578, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40576) { // 魂の結晶の破片（白）
					if (pc.isElf()) { // エルフ
						if (createNewItem(pc, 40573, 1)) {
							pc.getInventory().removeItem(l1iteminstance, 1);
							pc.death(null); // キャラクターを死亡させる
						}
					} else {
						pc.sendPackets(new S_ServerMessage(264)); // \f1あなたのクラスではこのアイテムは使用できません。
					}
				} else if (itemId == 40577) { // 魂の結晶の破片（黒）
					if (pc.isWizard()) { // WIZ
						if (createNewItem(pc, 40574, 1)) {
							pc.getInventory().removeItem(l1iteminstance, 1);
							pc.death(null); // キャラクターを死亡させる
						}
					} else {
						pc.sendPackets(new S_ServerMessage(264)); // \f1あなたのクラスではこのアイテムは使用できません。
					}
				} else if (itemId == 40578) { // 魂の結晶の破片（赤）
					if (pc.isKnight()) { // ナイト
						if (createNewItem(pc, 40575, 1)) {
							pc.getInventory().removeItem(l1iteminstance, 1);
							pc.death(null); // キャラクターを死亡させる
						}
					} else {
						pc.sendPackets(new S_ServerMessage(264)); // \f1あなたのクラスではこのアイテムは使用できません。
					}
				} else if (itemId == 49013) { // 魔族のスクロール
					if (createNewItem(pc, 49014, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.death(null); // キャラクターを死亡させる
					}
				} else if (itemId == 40411) { // ブラックエントの実
					if (createNewItem(pc, 20299, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
						pc.death(null); // キャラクターを死亡させる
					}
				} else if (itemId == 40555) { // 秘密の部屋のキー
					if (pc.isKnight()
							&& (pc.getX() >= 32806 && // オリム部屋
							pc.getX() <= 32814)
							&& (pc.getY() >= 32798 && pc.getY() <= 32807)
							&& pc.getMapId() == 13) {
						short mapid = 13;
						L1Teleport.teleport(pc, 32815, 32810, mapid, 5, false);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40417) { // ソウルクリスタル
					if ((pc.getX() >= 32665 && // 海賊島
					pc.getX() <= 32674)
							&& (pc.getY() >= 32976 && pc.getY() <= 32985)
							&& pc.getMapId() == 440) {
						short mapid = 430;
						L1Teleport.teleport(pc, 32922, 32812, mapid, 5, true);
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40528) { // ガーディアンの袋
					if (createNewItem(pc, 65, 1) && createNewItem(pc, 40597, 1)
							&& createNewItem(pc, 40537, 1)
							&& createNewItem(pc, 40593, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40588) { // エルフ族の宝物
					if (createNewItem(pc, 40243, 1)
							&& createNewItem(pc, 20084, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40566) { // ミステリアス シェル
					if (pc.isElf()
							&& (pc.getX() >= 33971 && // 象牙の塔の村の南にある魔方陣の座標
							pc.getX() <= 33975)
							&& (pc.getY() >= 32324 && pc.getY() <= 32328)
							&& pc.getMapId() == 4
							&& !pc.getInventory().checkItem(40548)) { // 亡霊の袋
						boolean found = false;
						for (L1Object obj : L1World.getInstance().getObject()) {
							if (obj instanceof L1MonsterInstance) {
								L1MonsterInstance mob = (L1MonsterInstance) obj;
								if (mob != null) {
									if (mob.getNpcTemplate().get_npcId() == 45300) {
										found = true;
										break;
									}
								}
							}
						}
						if (found) {
							pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
						} else {
							GMCommands.getInstance().mobspawn(client, 45300, 0,
									false); // 古代人の亡霊
						}
					} else {
						pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
					}
				} else if (itemId == 40548) { // 亡霊の袋
					if (createNewItem(pc, 40533, 1)
							&& createNewItem(pc, 192, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40546) { // マシャーの報酬
					if (createNewItem(pc, 192, 1)
							&& createNewItem(pc, 40245, 1)
							&& createNewItem(pc, 20171, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40599) { // タラスの魔法袋
					if (createNewItem(pc, 20055, 1)
							&& createNewItem(pc, 133, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40598) { // カーンの袋
					if (createNewItem(pc, 40268, 1)
							&& createNewItem(pc, 20004, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40556) { // 暗殺リストの袋
					if (createNewItem(pc, 40596, 1)) { // 死の誓約書（本来は暗殺リスト）
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40545) { // ロンドゥの袋
					if (createNewItem(pc, 40270, 1)
							&& createNewItem(pc, 20164, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40571) { // アサシンマスターの箱
					if (createNewItem(pc, 40648, 1)
							&& createNewItem(pc, 40595, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40553) { // ブルディカの袋
					if (createNewItem(pc, 40276, 1)
							&& createNewItem(pc, 20195, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49005) { // カリフの福袋 ダイアモンド
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 20) { // レッドポーション
						l1 = L1ItemId.POTION_OF_HEALING;
						l2 = 2;
					}
					if (k3 >= 21 && k3 <= 36) { // ランプメタル
						l1 = 40408;
						l2 = 2;
					}
					if (k3 >= 37 && k3 <= 48) { // グリーンポーション
						l1 = L1ItemId.POTION_OF_HASTE_SELF;
					}
					if (k3 >= 49 && k3 <= 59) { // 濃縮強力体力回復剤
						l1 = L1ItemId.CONDENSED_POTION_OF_GREATER_HEALING;
					}
					if (k3 >= 60 && k3 <= 69) { // 強化グリーンポーション
						l1 = 40018;
					}
					if (k3 >= 70 && k3 <= 78) { // ミスリル
						l1 = 40494;
						l2 = 5;
					}
					if (k3 >= 79 && k3 <= 83) { // ブレイブポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
					}
					if (k3 >= 84 && k3 <= 88) { // ランプスチール
						l1 = 40779;
					}
					if (k3 >= 89 && k3 <= 93) { // キメラの皮スネーク
						l1 = 40400;
					}
					if (k3 >= 94 && k3 <= 96) { // 砥石
						l1 = 40317;
					}
					if (k3 == 97) { // ゴールドプレート
						l1 = 40487;
					}
					if (k3 == 98) { // マーブルの遺産
						l1 = 40304;
					}
					if (k3 == 99) { // 月光の涙
						l1 = 40428;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49006) { // カリフの福袋 ルビー
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 16) { // オレンジポーション
						l1 = L1ItemId.POTION_OF_EXTRA_HEALING;
						l2 = 2;
					}
					if (k3 >= 17 && k3 <= 30) { // グリーンポーション
						l1 = L1ItemId.POTION_OF_HASTE_SELF;
					}
					if (k3 >= 31 && k3 <= 42) { // ランプメタル
						l1 = 40408;
						l2 = 2;
					}
					if (k3 >= 43 && k3 <= 52) { // 黒魔石
						l1 = 40320;
						l2 = 3;
					}
					if (k3 >= 53 && k3 <= 62) { // 強化グリーンポーション
						l1 = 40018;
					}
					if (k3 >= 63 && k3 <= 70) { // 高級皮革
						l1 = 40406;
						l2 = 4;
					}
					if (k3 >= 71 && k3 <= 75) { // シャイニングスケイル
						l1 = 40458;
					}
					if (k3 >= 76 && k3 <= 80) { // ブレイブポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
					}
					if (k3 >= 81 && k3 <= 85) { // ミスリルの原石
						l1 = 40496;
						l2 = 2;
					}
					if (k3 >= 86 && k3 <= 90) { // 濃縮高級体力回復剤
						l1 = L1ItemId.CONDENSED_POTION_OF_EXTRA_HEALING;
					}
					if (k3 >= 91 && k3 <= 95) { // キメラの皮ライオン
						l1 = 40399;
					}
					if (k3 >= 96 && k3 <= 97) { // プラチナのピース
						l1 = 40441;
					}
					if (k3 == 98) { // シルバーのピース
						l1 = 40468;
					}
					if (k3 == 99) { // ファアグリオの遺産
						l1 = 40305;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49007) { // カリフの福袋 サファイア
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 18) { // レッドポーション
						l1 = L1ItemId.POTION_OF_HEALING;
						l2 = 5;
					}
					if (k3 >= 19 && k3 <= 33) { // グリーンポーション
						l1 = L1ItemId.POTION_OF_HASTE_SELF;
						l2 = 2;
					}
					if (k3 >= 34 && k3 <= 48) { // ランプメタル
						l1 = 40408;
						l2 = 2;
					}
					if (k3 >= 49 && k3 <= 60) { // ブルーポーション
						l1 = L1ItemId.POTION_OF_MANA;
						l2 = 2;
					}
					if (k3 >= 61 && k3 <= 70) { // 魔力の石
						l1 = 40318;
					}
					if (k3 >= 71 && k3 <= 80) { // ウィズダムポーション
						l1 = L1ItemId.POTION_OF_EMOTION_WISDOM;
					}
					if (k3 >= 81 && k3 <= 86) { // ミスリル
						l1 = 40494;
						l2 = 5;
					}
					if (k3 >= 87 && k3 <= 91) { // キメラの皮ヤギ
						l1 = 40398;
					}
					if (k3 >= 92 && k3 <= 94) { // フェアリーの羽
						l1 = 40521;
					}
					if (k3 == 95) { // ブラックミスリル原石
						l1 = 40444;
					}
					if (k3 == 96) { // ゴールドのピース
						l1 = 40489;
					}
					if (k3 == 97) { // プラチナのピース
						l1 = 40441;
					}
					if (k3 == 98) { // エルヴンワッフル
						l1 = 40068;
					}
					if (k3 == 99) { // サイハの遺産
						l1 = 40307;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49008) { // カリフの福袋 エメラルド
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 19) { // レッドポーション
						l1 = L1ItemId.POTION_OF_HEALING;
						l2 = 3;
					}
					if (k3 >= 20 && k3 <= 36) { // ランプメタル
						l1 = 40408;
						l2 = 3;
					}
					if (k3 >= 37 && k3 <= 44) { // オリハルコン
						l1 = 40508;
						l2 = 4;
					}
					if (k3 >= 45 && k3 <= 52) { // ブルーポーション
						l1 = L1ItemId.POTION_OF_MANA;
					}
					if (k3 >= 53 && k3 <= 60) { // クリアポーション
						l1 = L1ItemId.POTION_OF_GREATER_HEALING;
					}
					if (k3 >= 61 && k3 <= 68) { // グリーンポーション
						l1 = L1ItemId.POTION_OF_HASTE_SELF;
					}
					if (k3 >= 69 && k3 <= 75) { // シャイニングスケイル
						l1 = 40458;
					}
					if (k3 >= 76 && k3 <= 80) { // シルバーのピース
						l1 = 40468;
					}
					if (k3 >= 81 && k3 <= 85) { // ランプスチール
						l1 = 40779;
					}
					if (k3 >= 86 && k3 <= 90) { // キメラの皮ドラゴン
						l1 = 40397;
					}
					if (k3 >= 91 && k3 <= 95) { // 精霊の石
						l1 = 40515;
					}
					if (k3 >= 96 && k3 <= 97) { // エルヴンワッフル
						l1 = 40068;
					}
					if (k3 == 98) { // ブラックミスリルの原石
						l1 = 40444;
					}
					if (k3 == 99) { // エヴァの遺産
						l1 = 40306;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49009) { // カリフの高級福袋 ダイアモンド
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 14) { // レッドポーション
						l1 = L1ItemId.POTION_OF_HEALING;
						l2 = 20;
					}
					if (k3 >= 15 && k3 <= 23) { // ブレイブポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
						l2 = 2;
					}
					if (k3 >= 24 && k3 <= 32) { // 強化グリーンポーション
						l1 = 40018;
						l2 = 3;
					}
					if (k3 >= 33 && k3 <= 41) { // 濃縮強力体力回復剤
						l1 = L1ItemId.CONDENSED_POTION_OF_GREATER_HEALING;
						l2 = 2;
					}
					if (k3 >= 42 && k3 <= 50) { // 砥石
						l1 = 40317;
					}
					if (k3 >= 51 && k3 <= 59) { // 魔力の石
						l1 = 40318;
						l2 = 2;
					}
					if (k3 >= 60 && k3 <= 68) { // ランプメタル
						l1 = 40408;
						l2 = 3;
					}
					if (k3 >= 69 && k3 <= 77) { // ランプスチール
						l1 = 40779;
						l2 = 2;
					}
					if (k3 >= 78 && k3 <= 86) { // ミスリル
						l1 = 40494;
						l2 = 30;
					}
					if (k3 >= 87 && k3 <= 95) { // キメラの皮スネーク
						l1 = 40400;
					}
					if (k3 == 96) { // マーブルの遺産
						l1 = 40304;
					}
					if (k3 == 97) { // ゴールドプレート
						l1 = 40487;
					}
					if (k3 == 98) { // 月光の涙
						l1 = 40428;
					}
					if (k3 == 99) { // グリーンドラゴンの鱗
						l1 = 40396;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49011) { // カリフの高級福袋 ルビー
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 14) { // オレンジポーション
						l1 = L1ItemId.POTION_OF_EXTRA_HEALING;
						l2 = 5;
					}
					if (k3 >= 15 && k3 <= 22) { // グリーンポーション
						l1 = L1ItemId.POTION_OF_HASTE_SELF;
						l2 = 5;
					}
					if (k3 >= 23 && k3 <= 30) { // 強化グリーンポーション
						l1 = 40018;
						l2 = 2;
					}
					if (k3 >= 31 && k3 <= 38) { // ブレイブポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
						l2 = 2;
					}
					if (k3 >= 39 && k3 <= 46) { // 濃縮高級体力回復剤
						l1 = L1ItemId.CONDENSED_POTION_OF_EXTRA_HEALING;
						l2 = 5;
					}
					if (k3 >= 47 && k3 <= 54) { // 濃縮強力体力回復剤
						l1 = L1ItemId.CONDENSED_POTION_OF_GREATER_HEALING;
						l2 = 2;
					}
					if (k3 >= 55 && k3 <= 62) { // 黒魔石
						l1 = 40320;
						l2 = 5;
					}
					if (k3 >= 63 && k3 <= 70) { // ランプメタル
						l1 = 40408;
						l2 = 4;
					}
					if (k3 >= 71 && k3 <= 78) { // ミスリルの原石
						l1 = 40496;
						l2 = 3;
					}
					if (k3 >= 79 && k3 <= 86) { // シャイニングスケイル
						l1 = 40458;
						l2 = 2;
					}
					if (k3 >= 87 && k3 <= 94) { // キメラの皮ライオン
						l1 = 40399;
					}
					if (k3 >= 95) { // ゴールドのピース
						l1 = 40489;
					}
					if (k3 == 96) { // プラチナのピース
						l1 = 40441;
					}
					if (k3 == 97) { // ファアグリオの遺産
						l1 = 40305;
					}
					if (k3 == 98) { // オーガの血
						l1 = 40513;
					}
					if (k3 == 99) { // レッドドラゴンの鱗
						l1 = 40393;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49012) { // カリフの高級福袋 サファイア
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 14) { // レッドポーション
						l1 = L1ItemId.POTION_OF_HEALING;
						l2 = 20;
					}
					if (k3 >= 15 && k3 <= 22) { // 強化グリーンポーション
						l1 = 40018;
						l2 = 2;
					}
					if (k3 >= 23 && k3 <= 30) { // ウィズダムポーション
						l1 = L1ItemId.POTION_OF_EMOTION_WISDOM;
						l2 = 2;
					}
					if (k3 >= 31 && k3 <= 38) { // ブルーポーション
						l1 = L1ItemId.POTION_OF_MANA;
						l2 = 2;
					}
					if (k3 >= 39 && k3 <= 46) { // 魔力の石
						l1 = 40318;
						l2 = 4;
					}
					if (k3 >= 47 && k3 <= 54) { // エルヴンワッフル
						l1 = 40068;
						l2 = 2;
					}
					if (k3 >= 55 && k3 <= 62) { // ランプメタル
						l1 = 40408;
						l2 = 5;
					}
					if (k3 >= 63 && k3 <= 70) { // ミスリル
						l1 = 40494;
						l2 = 40;
					}
					if (k3 >= 71 && k3 <= 78) { // フェアリーの羽
						l1 = 40521;
						l2 = 2;
					}
					if (k3 >= 79 && k3 <= 86) { // シャイニングスケイル
						l1 = 40458;
					}
					if (k3 >= 87 && k3 <= 94) { // キメラの皮ヤギ
						l1 = 40398;
					}
					if (k3 == 95) { // ブラックミスリル原石
						l1 = 40444;
					}
					if (k3 == 96) { // ゴールドのピース
						l1 = 40489;
						l2 = 2;
					}
					if (k3 == 97) { // プラチナのピース
						l1 = 40441;
					}
					if (k3 == 98) { // サイハの遺産
						l1 = 40307;
					}
					if (k3 == 99) { // ホワイトドラゴンの鱗
						l1 = 40394;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 49010) { // カリフの高級福袋 エメラルド
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 13) { // オレンジポーション
						l1 = L1ItemId.POTION_OF_EXTRA_HEALING;
						l2 = 8;
					}
					if (k3 >= 14 && k3 <= 22) { // クリアポーション
						l1 = L1ItemId.POTION_OF_GREATER_HEALING;
						l2 = 5;
					}
					if (k3 >= 23 && k3 <= 31) { // ウィズダムポーション
						l1 = L1ItemId.POTION_OF_EMOTION_WISDOM;
						l2 = 2;
					}
					if (k3 >= 32 && k3 <= 40) { // ブルーポーション
						l1 = L1ItemId.POTION_OF_MANA;
						l2 = 3;
					}
					if (k3 >= 41 && k3 <= 49) { // ブレイブポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
					}
					if (k3 >= 50 && k3 <= 58) { // ランプメタル
						l1 = 40408;
						l2 = 5;
					}
					if (k3 >= 59 && k3 <= 67) { // オリハルコン
						l1 = 40508;
						l2 = 8;
					}
					if (k3 >= 68 && k3 <= 76) { // シャイニングスケイル
						l1 = 40458;
						l2 = 2;
					}
					if (k3 >= 77 && k3 <= 85) { // ランプスチール
						l1 = 40779;
					}
					if (k3 >= 86 && k3 <= 94) { // キメラの皮ドラゴン
						l1 = 40397;
					}
					if (k3 == 95) { // 精霊の石
						l1 = 40515;
						l2 = 2;
					}
					if (k3 == 96) { // シルバーのピース
						l1 = 40468;
						l2 = 2;
					}
					if (k3 == 97) { // ブラックミスリルの原石
						l1 = 40444;
					}
					if (k3 == 98) { // エヴァの遺産
						l1 = 40306;
					}
					if (k3 == 99) { // ブルードラゴンの鱗
						l1 = 40395;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId >= 40623 && itemId <= 40629) { // ドルーガ家の家宝
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 8) { // アデナ1M
						l1 = L1ItemId.ADENA;
						l2 = 1000000;
					}
					if (k3 >= 9 && k3 <= 15) { // アンタラスマジックアーマー
						l1 = 20130;
					}
					if (k3 >= 16 && k3 <= 22) { // パプリオンマジックアーマー
						l1 = 20153;
					}
					if (k3 >= 23 && k3 <= 29) { // ヴァラカスマジックアーマー
						l1 = 20108;
					}
					if (k3 >= 30 && k3 <= 36) { // リンドビオルマジックアーマー
						l1 = 20119;
					}
					if (k3 >= 37 && k3 <= 43) { // ドラゴンスレイヤー
						l1 = 66;
					}
					if (k3 >= 44 && k3 <= 50) { // 謎の家宝
						l1 = 40666;
					}
					if (k3 >= 51 && k3 <= 57) { // 古代のスクロール
						l1 = 40076;
					}
					if (k3 >= 58 && k3 <= 64) { // エリクサー(腕力)
						l1 = 40033;
					}
					if (k3 >= 65 && k3 <= 71) { // エリクサー(俊敏)
						l1 = 40035;
					}
					if (k3 >= 72 && k3 <= 78) { // エリクサー(体力)
						l1 = 40034;
					}
					if (k3 >= 79 && k3 <= 85) { // エリクサー(知力)
						l1 = 40036;
					}
					if (k3 >= 86 && k3 <= 92) { // エリクサー(魔力)
						l1 = 40037;
					}
					if (k3 >= 93 && k3 <= 99) { // エリクサー(魅力)
						l1 = 40038;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40715) { // ピアスの贈り物
					int l1 = 0;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 6) { // ブロンズクロウ
						l1 = 152;
					}
					if (k3 >= 7 && k3 <= 12) { // スチールクロウ
						l1 = 153;
					}
					if (k3 >= 13 && k3 <= 18) { // シェイドクロウ
						l1 = 154;
					}
					if (k3 >= 19 && k3 <= 24) { // シルバークロウ
						l1 = 157;
					}
					if (k3 >= 25 && k3 <= 30) { // ダーククロウ
						l1 = 158;
					}
					if (k3 >= 31 && k3 <= 36) { // ショートクロウ
						l1 = 159;
					}
					if (k3 >= 37 && k3 <= 42) { // ダマスカスクロウ
						l1 = 161;
					}
					if (k3 >= 43 && k3 <= 45) { // ブラインドクロウ
						l1 = 162;
					}
					if (k3 >= 46 && k3 <= 51) { // ブロンズデュアルブレード
						l1 = 69;
					}
					if (k3 >= 52 && k3 <= 57) { // スチールデュアルブレード
						l1 = 71;
					}
					if (k3 >= 58 && k3 <= 63) { // シェイドデュアルブレード
						l1 = 72;
					}
					if (k3 >= 64 && k3 <= 69) { // シルバーデュアルブレード
						l1 = 74;
					}
					if (k3 >= 70 && k3 <= 75) { // ダークデュアルブレード
						l1 = 75;
					}
					if (k3 >= 76 && k3 <= 81) { // ショートデュアルブレード
						l1 = 77;
					}
					if (k3 >= 82 && k3 <= 87) { // ダマスカスデュアルブレード
						l1 = 80;
					}
					if (k3 >= 88 && k3 <= 90) { // ブラインドデュアルブレード
						l1 = 81;
					}
					if (k3 >= 91 && k3 <= 96) { // ダーククロスボウ
						l1 = 168;
					}
					if (k3 >= 97 && k3 <= 99) { // ブラインドクロスボウ
						l1 = 177;
					}
					if (createNewItem(pc, l1, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40724) { // ブロンズパンプキン
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 4) { // リンゴジュース
						l1 = 40028;
						l2 = 60;
					}
					if (k3 >= 5 && k3 <= 9) { // きつね色のパン
						l1 = 40058;
						l2 = 3;
					}
					if (k3 >= 10 && k3 <= 14) { // 黒こげのパン
						l1 = 40071;
					}
					if (k3 >= 15 && k3 <= 19) { // 強化グリーン ポーション
						l1 = 40018;
					}
					if (k3 >= 20 && k3 <= 24) { // 変身スクロール
						l1 = 40088;
						l2 = 3;
					}
					if (k3 >= 25 && k3 <= 29) { // ブルー ポーション
						l1 = L1ItemId.POTION_OF_MANA;
						l2 = 5;
					}
					if (k3 >= 30 && k3 <= 34) { // 魔力の石
						l1 = 40318;
						l2 = 20;
					}
					if (k3 >= 35 && k3 <= 39) { // ブレイブ ポーション
						l1 = L1ItemId.POTION_OF_EMOTION_BRAVERY;
						l2 = 10;
					}
					if (k3 >= 40 && k3 <= 44) { // エルヴン ワッフル
						l1 = 40068;
					}
					if (k3 >= 45 && k3 <= 49) { // 復活スクロール
						l1 = 40089;
						l2 = 10;
					}
					if (k3 >= 50 && k3 <= 54) { // ウサギの肝
						l1 = 40043;
					}
					if (k3 >= 55 && k3 <= 59) { // ハイ コリーのチョーカー
						l1 = 20345;
					}
					if (k3 >= 60 && k3 <= 64) { // ハイ ラクーンのチョーカー
						l1 = 20346;
					}
					if (k3 >= 65 && k3 <= 69) { // アデン商団のアミュレット
						l1 = 20349;
					}
					if (k3 >= 70 && k3 <= 74) { // 祝福された レモン
						l1 = 140061;
					}
					if (k3 >= 75 && k3 <= 79) { // 祝福された バナナ
						l1 = 140062;
					}
					if (k3 >= 80 && k3 <= 84) { // 祝福された キャンディ
						l1 = 140065;
					}
					if (k3 >= 85 && k3 <= 89) { // 祝福された オレンジ
						l1 = 140069;
					}
					if (k3 >= 90 && k3 <= 94) { // 祝福された パンケーキ
						l1 = 140072;
					}
					if (k3 >= 95 && k3 <= 99) { // 祝福された エントの実
						l1 = 140506;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40723) { // シルバーパンプキン
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 11) { // 濃縮強力体力回復剤
						l1 = L1ItemId.CONDENSED_POTION_OF_GREATER_HEALING;
						l2 = 9;
					}
					if (k3 >= 12 && k3 <= 16) { // 古代の強力体力回復剤
						l1 = 40024;
						l2 = 20;
					}
					if (k3 >= 17 && k3 <= 21) { // ブルー ポーション
						l1 = 40015;
						l2 = 20;
					}
					if (k3 >= 22 && k3 <= 26) { // エルヴン ワッフル
						l1 = 40068;
						l2 = 5;
					}
					if (k3 >= 27 && k3 <= 31) { // ブランクスクロール(Lv4)
						l1 = 40093;
						l2 = 8;
					}
					if (k3 >= 32 && k3 <= 36) { // ブランクスクロール(Lv5)
						l1 = 40094;
						l2 = 8;
					}
					if (k3 >= 37 && k3 <= 41) { // 黒い血痕
						l1 = 40524;
					}
					if (k3 >= 42 && k3 <= 46) { // 防具強化スクロール
						l1 = L1ItemId.SCROLL_OF_ENCHANT_ARMOR;
					}
					if (k3 >= 47 && k3 <= 51) { // 武器強化スクロール
						l1 = L1ItemId.SCROLL_OF_ENCHANT_WEAPON;
					}
					if (k3 >= 52 && k3 <= 56) { // 袴
						l1 = 20347;
					}
					if (k3 >= 57 && k3 <= 61) { // 晴着
						l1 = 20348;
					}
					if (k3 >= 62 && k3 <= 66) { // 雪だるまのネックレス
						l1 = 20350;
					}
					if (k3 >= 67 && k3 <= 71) { // 魔法書(シェイプ チェンジ)
						l1 = 40212;
					}
					if (k3 >= 72 && k3 <= 76) { // 魔法書(クリエイト マジカル ウェポン)
						l1 = 40218;
					}
					if (k3 >= 77 && k3 <= 81) { // 祝福された エルヴン ワッフル
						l1 = 140068;
					}
					if (k3 >= 82 && k3 <= 83) { // 祝福された ダガー
						l1 = 100004;
					}
					if (k3 >= 84 && k3 <= 85) { // 祝福された シルバー ソード
						l1 = 100025;
					}
					if (k3 >= 86 && k3 <= 87) { // 祝福された ジェネラル グレートソード
						l1 = 100062;
					}
					if (k3 >= 88 && k3 <= 89) { // 祝福された エルヴン スピアー
						l1 = 100099;
					}
					if (k3 >= 90 && k3 <= 91) { // 祝福された ビショップ スタッフ
						l1 = 100132;
					}
					if (k3 >= 92 && k3 <= 93) { // 祝福された ハンターボウ
						l1 = 100169;
					}
					if (k3 >= 94 && k3 <= 95) { // 祝福された マジック ヘルム
						l1 = 120011;
					}
					if (k3 >= 96 && k3 <= 97) { // 祝福された Tシャツ
						l1 = 120085;
					}
					if (k3 >= 98 && k3 <= 99) { // 祝福された エルヴン チェーン メイル
						l1 = 120137;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40722) { // ゴールドパンプキン
					int l1 = 0;
					int l2 = 1;
					Random random = new Random();
					int k3 = random.nextInt(100);
					if (k3 <= 12) { // 黒い血痕
						l1 = 40524;
						l2 = 10;
					}
					if (k3 >= 13 && k3 <= 27) { // ウサギの肝
						l1 = 40043;
						l2 = 10;
					}
					if (k3 >= 28 && k3 <= 42) { // エルヴン ワッフル
						l1 = 40068;
						l2 = 30;
					}
					if (k3 >= 43 && k3 <= 47) { // ワイン
						l1 = 40039;
						l2 = 10;
					}
					if (k3 >= 48 && k3 <= 52) { // ウィスキー
						l1 = 40040;
						l2 = 10;
					}
					if (k3 >= 53 && k3 <= 57) { // イビルブラッド
						l1 = 40031;
						l2 = 10;
					}
					if (k3 >= 58 && k3 <= 62) { // デス ローブ
						l1 = 20342;
					}
					if (k3 >= 63 && k3 <= 67) { // ヴァンパイア マント
						l1 = 20079;
					}
					if (k3 >= 68 && k3 <= 72) { // パンプキン マスク
						l1 = 20047;
					}
					if (k3 >= 73 && k3 <= 77) { // ディ フォン ダブレット ジッツ
						l1 = 20086;
					}
					if (k3 >= 78 && k3 <= 82) { // ディ フォン ダブレット ヴィッツ
						l1 = 20087;
					}
					if (k3 >= 83 && k3 <= 87) { // ディ フォン ダブレット チェッツ
						l1 = 20088;
					}
					if (k3 == 88) { // 祝福された シルバー ロング ソード
						l1 = 100029;
					}
					if (k3 == 89) { // 祝福された ダマスカス ソード
						l1 = 100037;
					}
					if (k3 == 90) { // 祝福された レイピア
						l1 = 100042;
					}
					if (k3 == 91) { // 祝福された ジェネラル ソード
						l1 = 100049;
					}
					if (k3 == 92) { // 祝福された シルバー デュアルブレード
						l1 = 100074;
					}
					if (k3 == 93) { // 祝福された マジック プロテクション リング
						l1 = 120280;
					}
					if (k3 == 94) { // 祝福された シャイニング ボディベルト
						l1 = 120309;
					}
					if (k3 == 95) { // 祝福された シャイニング ソウルベルト
						l1 = 120310;
					}
					if (k3 == 96) { // 祝福された シャイニング マインドベルト
						l1 = 120311;
					}
					if (k3 == 97) { // 祝福された オーガ ベルト
						l1 = 120317;
					}
					if (k3 == 98) { // 祝福された タイタン ベルト
						l1 = 120320;
					}
					if (k3 == 99) { // 祝福された トロール ベルト
						l1 = 120321;
					}
					if (createNewItem(pc, l1, l2)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40006 || itemId == 40412
						|| itemId == 140006) {
					// パインワンド
					if (pc.getMap().isUsePainwand()) {
						S_AttackStatus s_attackStatus = new S_AttackStatus(pc,
								0, ActionCodes.ACTION_Wand);
						pc.sendPackets(s_attackStatus);
						pc.broadcastPacket(s_attackStatus);
						int[] mobArray = { 45008, 45140, 45016, 45021, 45025,
								45033, 45099, 45147, 45123, 45130, 45046,
								45092, 45138, 45098, 45127, 45143, 45149,
								45171, 45040, 45155, 45192, 45173, 45213,
								45079, 45144 };
						// ゴブリン・ホブコブリン・コボルト・鹿・グレムリン
						// インプ・インプエルダー・オウルベア・スケルトンアーチャー・スケルトンアックス
						// ビーグル・ドワーフウォーリアー・オークスカウト・ガンジオーク・ロバオーク
						// ドゥダーマラオーク・アトゥバオーク・ネルガオーク・ベアー・トロッグ
						// ラットマン・ライカンスロープ・ガースト・ノール・リザードマン
						/*
						 * 45005, 45008, 45009, 45016, 45019, 45043, 45060,
						 * 45066, 45068, 45082, 45093, 45101, 45107, 45126,
						 * 45129, 45136, 45144, 45157, 45161, 45173, 45184,
						 * 45223 }; // カエル、ゴブリン、オーク、コボルド、 // オーク
						 * アーチャー、ウルフ、スライム、ゾンビ、 // フローティングアイ、オーク ファイター、 // ウェア
						 * ウルフ、アリゲーター、スケルトン、 // ストーン ゴーレム、スケルトン アーチャー、 // ジャイアント
						 * スパイダー、リザードマン、グール、 // スパルトイ、ライカンスロープ、ドレッド スパイダー、 //
						 * バグベアー
						 */
						int rnd = L1PcInstance.getRnd()
								.nextInt(mobArray.length);
						GMCommands.getInstance().mobspawn(client,
								mobArray[rnd], 0, true);
					} else {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					}
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId == 40007) { // エボニー ワンド
					CancelAbsoluteBarrier(pc); // アブソルート バリアの解除
					pc.sendPackets(new S_AttackStatus(pc, 0,
							ActionCodes.ACTION_Wand));
					pc.broadcastPacket(new S_AttackStatus(pc, 0,
							ActionCodes.ACTION_Wand));
					L1Object target = L1World.getInstance().findObject(l);
					pc.sendPackets(new S_SkillSound(l, 10));
					pc.broadcastPacket(new S_SkillSound(l, 10));
					if (target != null) {
						doWandAction(pc, target);
					}
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId == 40008 || itemId == 40410
						|| itemId == 140008) { // メイプルワンド
					pc.sendPackets(new S_AttackStatus(pc, 0,
							ActionCodes.ACTION_Wand));
					pc.broadcastPacket(new S_AttackStatus(pc, 0,
							ActionCodes.ACTION_Wand));
					L1Object target = L1World.getInstance().findObject(l);
					if (target != null) {
						L1Character cha = (L1Character) target;
						polyAction(pc, cha);
					}
					if (pc.getId() == target.getId()) { // ターゲットが自分
						;
					} else if (target instanceof L1PcInstance) { // ターゲットがPC
						L1PcInstance targetpc = (L1PcInstance) target;
						if (pc.getClanid() != 0
								&& pc.getClanid() == targetpc.getClanid()) { // ターゲットが同じクラン
							;
						}
					} else { // その他（NPCや他のクランのPC）
						CancelAbsoluteBarrier(pc); // アブソルート バリアの解除
					}
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId >= 40289 && itemId <= 40297) { // 傲慢の塔11~91階テレポートアミュレット
					useToiTeleportAmulet(pc, itemId, l1iteminstance);
				} else if (itemId >= 40280 && itemId <= 40288) {
					// 封印された傲慢の塔11～91階テレポートアミュレット
					pc.getInventory().removeItem(l1iteminstance, 1);
					L1ItemInstance item = pc.getInventory().storeItem(
							itemId + 9, 1);
					if (item != null) {
						pc.sendPackets(new S_ServerMessage(403, item
								.getLogName()));
					}
				} else if (itemId == 40056 || itemId == 40057
						|| itemId == 40059 || itemId == 40060
						|| itemId == 40061 || itemId == 40062
						|| itemId == 40063 || itemId == 40064
						|| itemId == 40065 || itemId == 40069
						|| itemId == 40072 || itemId == 40073
						|| itemId == 140061 || itemId == 140062
						|| itemId == 140065 || itemId == 140069
						|| itemId == 140072) {
					int i2 = pc.get_food(); // 肉類
					pc.getInventory().removeItem(l1iteminstance, 1);
					if (i2 < 29) {
						int j4 = i2 + 1;
						pc.set_food(j4);
						pc.sendPackets(new S_OwnCharStatus(pc));
					}
					if (itemId == 40057) { // フローティングアイ肉
						pc.setSkillEffect(STATUS_FLOATING_EYE, 0);
					}
					L1Item l1itemfood = ItemTable.getInstance().getTemplate(
							itemId);
					pc
							.sendPackets(new S_ServerMessage(76, l1itemfood
									.getName()));
				} else if (itemId >= 40136 && itemId <= 40161) { // 花火
					int soundid = 3198;
					if (itemId == 40154) {
						soundid = 3198;
					} else if (itemId == 40152) {
						soundid = 2031;
					} else if (itemId == 40141) {
						soundid = 2028;
					} else if (itemId == 40160) {
						soundid = 2030;
					} else if (itemId == 40145) {
						soundid = 2029;
					} else if (itemId == 40159) {
						soundid = 2033;
					} else if (itemId == 40151) {
						soundid = 2032;
					} else if (itemId == 40161) {
						soundid = 2037;
					} else if (itemId == 40142) {
						soundid = 2036;
					} else if (itemId == 40146) {
						soundid = 2039;
					} else if (itemId == 40148) {
						soundid = 2043;
					} else if (itemId == 40143) {
						soundid = 2041;
					} else if (itemId == 40156) {
						soundid = 2042;
					} else if (itemId == 40139) {
						soundid = 2040;
					} else if (itemId == 40137) {
						soundid = 2048;
					} else if (itemId == 40136) {
						soundid = 2046;
					} else if (itemId == 40138) {
						soundid = 2047;
					} else if (itemId == 40140) {
						soundid = 2051;
					} else if (itemId == 40144) {
						soundid = 2053;
					} else if (itemId == 40147) {
						soundid = 2045;
					} else if (itemId == 40149) {
						soundid = 2034;
					} else if (itemId == 40150) {
						soundid = 2055;
					} else if (itemId == 40153) {
						soundid = 2038;
					} else if (itemId == 40155) {
						soundid = 2044;
					} else if (itemId == 40157) {
						soundid = 2035;
					} else if (itemId == 40158) {
						soundid = 2049;
					} else {
						soundid = 3198;
					}

					S_SkillSound s_skillsound = new S_SkillSound(pc.getId(),
							soundid);
					pc.sendPackets(s_skillsound);
					pc.broadcastPacket(s_skillsound);
					pc.getInventory().removeItem(l1iteminstance, 1);
				} else if (itemId == 40615) { // 影の神殿2階の鍵
					if ((pc.getX() >= 32701 && pc.getX() <= 32705)
							&& (pc.getY() >= 32894 && pc.getY() <= 32898)
							&& pc.getMapId() == 522) { // 影の神殿1F
						L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance
								.getItem()).get_locx(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_locy(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_mapid(), 5, true);
					} else {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId == 40616 || itemId == 40782
						|| itemId == 40783) { // 影の神殿3階の鍵
					if ((pc.getX() >= 32698 && pc.getX() <= 32702)
							&& (pc.getY() >= 32894 && pc.getY() <= 32898)
							&& pc.getMapId() == 523) { // 影の神殿2階
						L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance
								.getItem()).get_locx(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_locy(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_mapid(), 5, true);
					} else {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId == 40692) { // 完成された宝の地図
					if (pc.getInventory().checkItem(40621)) {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					} else if ((pc.getX() >= 32856 && pc.getX() <= 32858)
							&& (pc.getY() >= 32857 && pc.getY() <= 32858)
							&& pc.getMapId() == 443) { // 海賊島のダンジョン３階
						L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance
								.getItem()).get_locx(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_locy(),
								((L1EtcItem) l1iteminstance.getItem())
								.get_mapid(), 5, true);
					} else {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId == 41146) { // ドロモンドの招待状
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei001"));
				} else if (itemId == 40641) { // トーキングスクロール
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "tscrollo"));
				} else if (itemId == 40383) { // 地図：歌う島
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei035"));
				} else if (itemId == 40384) { // 地図：隠された渓谷
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei036"));
				} else if (itemId == 40101) { // 隠された渓谷帰還スクロール
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei037"));
				} else if (itemId == 41209) { // ポピレアの依頼書
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei002"));
				} else if (itemId == 41210) { // 研磨材
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei003"));
				} else if (itemId == 41211) { // ハーブ
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei004"));
				} else if (itemId == 41212) { // 特製キャンディー
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei005"));
				} else if (itemId == 41213) { // ティミーのバスケット
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei006"));
				} else if (itemId == 41214) { // 運の証
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei012"));
				} else if (itemId == 41215) { // 知の証
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei010"));
				} else if (itemId == 41216) { // 力の証
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei011"));
				} else if (itemId == 41222) { // マシュル
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei008"));
				} else if (itemId == 41223) { // 武具の破片
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei007"));
				} else if (itemId == 41224) { // バッジ
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei009"));
				} else if (itemId == 41225) { // ケスキンの発注書
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei013"));
				} else if (itemId == 41226) { // パゴの薬
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei014"));
				} else if (itemId == 41227) { // アレックスの紹介状
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei033"));
				} else if (itemId == 41228) { // ラビのお守り
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei034"));
				} else if (itemId == 41229) { // スケルトンの頭
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei025"));
				} else if (itemId == 41230) { // ジーナンへの手紙
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei020"));
				} else if (itemId == 41231) { // マッティへの手紙
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei021"));
				} else if (itemId == 41233) { // ケーイへの手紙
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei019"));
				} else if (itemId == 41234) { // 骨の入った袋
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei023"));
				} else if (itemId == 41235) { // 材料表
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei024"));
				} else if (itemId == 41236) { // ボーンアーチャーの骨
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei026"));
				} else if (itemId == 41237) { // スケルトンスパイクの骨
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei027"));
				} else if (itemId == 41239) { // ヴートへの手紙
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei018"));
				} else if (itemId == 41240) { // フェーダへの手紙
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "ei022"));
				} else if (itemId == 41060) { // ノナメの推薦書
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "nonames"));
				} else if (itemId == 41061) { // 調査団の証書：エルフ地域ドゥダ-マラカメ
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "kames"));
				} else if (itemId == 41062) { // 調査団の証書：人間地域ネルガバクモ
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "bakumos"));
				} else if (itemId == 41063) { // 調査団の証書：精霊地域ドゥダ-マラブカ
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "bukas"));
				} else if (itemId == 41064) { // 調査団の証書：オーク地域ネルガフウモ
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "huwoomos"));
				} else if (itemId == 41065) { // 調査団の証書：調査団長アトゥバノア
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(), "noas"));
				} else if (itemId == 40701) { // 小さな宝の地図
					if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1) == 1) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"firsttmap"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 2) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"secondtmapa"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 3) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"secondtmapb"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 4) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"secondtmapc"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 5) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"thirdtmapd"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 6) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"thirdtmape"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 7) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"thirdtmapf"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 8) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"thirdtmapg"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 9) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"thirdtmaph"));
					} else if (pc.getQuest().get_step(L1Quest.QUEST_LUKEIN1)
							== 10) {
						pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"thirdtmapi"));
					}
				} else if (itemId == 40663) { // 息子の手紙
					pc.sendPackets(new S_NPCTalkReturn(pc.getId(),
								"sonsletter"));
				} else if (itemId == 41208) { // 散りゆく魂
					if ((pc.getX() >= 32844 && pc.getX() <= 32845)
							&& (pc.getY() >= 32693 && pc.getY() <= 32694)
							&& pc.getMapId() == 550) { // 船の墓場:地上層
						L1Teleport.teleport(pc, ((L1EtcItem) l1iteminstance
								.getItem()).get_locx(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_locy(),
								((L1EtcItem) l1iteminstance.getItem())
										.get_mapid(), 5, true);
					} else {
						// \f1何も起きませんでした。
						pc.sendPackets(new S_ServerMessage(79));
					}
				} else if (itemId == 41217) { // 君主の袋
					if (createNewItem(pc, 20384, 1) // ロードヘルム・アーマー・シールド
							&& createNewItem(pc, 20391, 1)
							&& createNewItem(pc, 20397, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41218) { // ナイトの袋
					if (createNewItem(pc, 20385, 1) // ナイトヘルム・アーマー・シール
							&& createNewItem(pc, 20394, 1)
							&& createNewItem(pc, 20398, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41219) { // エルフの袋
					if (createNewItem(pc, 20386, 1) // エルヴンヘルム・アーマー・ブーツ
							&& createNewItem(pc, 20392, 1)
							&& createNewItem(pc, 20403, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41220) { // ウイザードの袋
					if (createNewItem(pc, 20387, 1) // ウィザードヘルム・クローク・ブーツ
							&& createNewItem(pc, 20399, 1)
							&& createNewItem(pc, 20404, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41221) { // ダークエルフ袋
					if (createNewItem(pc, 20388, 1) // ダークエルフヘルム・マント・ブーツ
							&& createNewItem(pc, 20400, 1)
							&& createNewItem(pc, 20405, 1)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41232) { // ジョンの届け物
					if (createNewItem(pc, 41233, 1) // ケーイへの手紙
							&& createNewItem(pc, 41234, 1)) { // 骨の入った袋
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41238) { // ケーイの届け物
					if (createNewItem(pc, 41239, 1) // ヴートへの手紙
							&& createNewItem(pc, 41240, 1)) { // フェーダへの手紙
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41241) { // 骨細工師の袋
					if (createNewItem(pc, 20045, 1) // ボーンヘルム
							&& createNewItem(pc, 20221, 1)) { // ボーンシールド
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41242) { // オークの袋
					if (createNewItem(pc, 40930, 1) // バーベキュー
							&& createNewItem(pc, 41081, 1) // オークのバッジ
							&& createNewItem(pc, 41082, 1) // オークのアミュレット
							&& createNewItem(pc, 41085, 1)) { // 予言者のパール
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 41074) { // バンディッドの袋
					if (createNewItem(pc, L1ItemId.ADENA, 500)) {
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40702) { // 小さな袋
					if (createNewItem(pc, 40701, 1)) { // 小さな宝の地図
						pc.getInventory().removeItem(l1iteminstance, 1);
					}
				} else if (itemId == 40700) { // シルバーフルート
					pc.sendPackets(new S_Sound(10));
					pc.broadcastPacket(new S_Sound(10));
					if ((pc.getX() >= 32619 && pc.getX() <= 32623)
							&& (pc.getY() >= 33120 && pc.getY() <= 33124)
							&& pc.getMapId() == 440){ // 海賊島前半魔方陣座標
						boolean found = false;
						for (L1Object obj : L1World.getInstance().
								getObject()) {
							if (obj instanceof L1MonsterInstance) {
								L1MonsterInstance mob = (L1MonsterInstance)
								obj;
								if (mob != null) {
									if (mob.getNpcTemplate().get_npcId()
											== 45875) {
										found = true;
										break;
									}
								}
							}
						}
						if (found) {
						} else {
							GMCommands.getInstance().mobspawn(client,
									45875, 0, false); // ラバーボーンヘッド
						}
					}
				} else {
					String s1 = l1iteminstance.get_itemnameid();
					int unuseditemcount = l1iteminstance.getCount();
					if (unuseditemcount == 1) {
						pc.sendPackets(new S_ServerMessage(74, s1));
					} else if (unuseditemcount == 0) {
						pc.sendPackets(new S_ServerMessage(329, s1));
					} else {
						s = s1 + " (" + unuseditemcount + ")";
						pc.sendPackets(new S_ServerMessage(74, s));
					}
				}
			} else if (l1iteminstance.getItem().getType2() == 1) {
				// 種別：武器
				int min = l1iteminstance.getItem().getMinLevel();
				int max = l1iteminstance.getItem().getMaxLevel();
				if (min != 0 && min > pc.getLevel()) {
					// このアイテムは%0レベル以上にならなければ使用できません。
					pc
							.sendPackets(new S_ServerMessage(318, String
									.valueOf(min)));
				} else if (max != 0 && max < pc.getLevel()) {
					// このアイテムは%dレベル以下のみ使用できます。
					pc
							.sendPackets(new S_ServerMessage(672, String
									.valueOf(max)));
				} else {
					if (pc.isCrown() && l1iteminstance.getItem().isUseRoyal()
							|| pc.isKnight()
							&& l1iteminstance.getItem().isUseKnight()
							|| pc.isElf()
							&& l1iteminstance.getItem().isUseElf()
							|| pc.isWizard()
							&& l1iteminstance.getItem().isUseMage()
							|| pc.isDarkelf()
							&& l1iteminstance.getItem().isUseDarkelf()) {
						UseWeapon(pc, l1iteminstance);
					} else {
						// \f1あなたのクラスではこのアイテムは使用できません。
						pc.sendPackets(new S_ServerMessage(264));
					}
				}
			} else if (l1iteminstance.getItem().getType2() == 2) { // 種別：防具
				if (pc.isCrown() && l1iteminstance.getItem().isUseRoyal()
						|| pc.isKnight()
						&& l1iteminstance.getItem().isUseKnight() || pc.isElf()
						&& l1iteminstance.getItem().isUseElf() || pc.isWizard()
						&& l1iteminstance.getItem().isUseMage()
						|| pc.isDarkelf()
						&& l1iteminstance.getItem().isUseDarkelf()) {

					int min = ((L1Armor) l1iteminstance.getItem())
							.getMinLevel();
					int max = ((L1Armor) l1iteminstance.getItem())
							.getMaxLevel();
					if (min != 0 && min > pc.getLevel()) {
						// このアイテムは%0レベル以上にならなければ使用できません。
						pc.sendPackets(new S_ServerMessage(318, String
								.valueOf(min)));
					} else if (max != 0 && max < pc.getLevel()) {
						// このアイテムは%dレベル以下のみ使用できます。
						pc.sendPackets(new S_ServerMessage(673, String
								.valueOf(max)));
					} else {
						UseArmor(pc, l1iteminstance);
					}
				} else {
					// \f1あなたのクラスではこのアイテムは使用できません。
					pc.sendPackets(new S_ServerMessage(264));
				}
			}

			// 効果ディレイがある場合は現在時間をセット
			if (isDelayEffect) {
				Timestamp ts = new Timestamp(System.currentTimeMillis());
				l1iteminstance.setLastUsed(ts);
				pc.getInventory().updateItem(l1iteminstance,
						L1PcInventory.COL_DELAY_EFFECT);
			}

			L1ItemDelay.onItemUse(client, l1iteminstance); // アイテムディレイ開始
		}
	}

	private void SuccessEnchant(L1PcInstance pc, L1ItemInstance item,
			ClientThread client, int i) {
		String s = "";
		String sa = "";
		String sb = "";
		String s1 = item.get_itemnameid();
		String pm = "";
		if (item.getEnchantLevel() > 0) {
			pm = "+";
		}
		if (item.getItem().getType2() == 1) {
			if (!item.isIdentified() || item.getEnchantLevel() == 0) {
				switch (i) {
				case -1:
					s = s1;
					sa = "$246";
					sb = "$247";
					break;

				case 1: // '\001'
					s = s1;
					sa = "$245";
					sb = "$247";
					break;

				case 2: // '\002'
					s = s1;
					sa = "$245";
					sb = "$248";
					break;

				case 3: // '\003'
					s = s1;
					sa = "$245";
					sb = "$248";
					break;
				}
			} else {
				switch (i) {
				case -1:
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$246";
					sb = "$247";
					break;

				case 1: // '\001'
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$245";
					sb = "$247";
					break;

				case 2: // '\002'
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$245";
					sb = "$248";
					break;

				case 3: // '\003'
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$245";
					sb = "$248";
					break;
				}
			}
		} else if (item.getItem().getType2() == 2) {
			if (!item.isIdentified() || item.getEnchantLevel() == 0) {
				switch (i) {
				case -1:
					s = s1;
					sa = "$246";
					sb = "$247";
					break;

				case 1: // '\001'
					s = s1;
					sa = "$252";
					sb = "$247 ";
					break;

				case 2: // '\002'
					s = s1;
					sa = "$252";
					sb = "$248 ";
					break;

				case 3: // '\003'
					s = s1;
					sa = "$252";
					sb = "$248 ";
					break;
				}
			} else {
				switch (i) {
				case -1:
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$246";
					sb = "$247";
					break;

				case 1: // '\001'
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$252";
					sb = "$247 ";
					break;

				case 2: // '\002'
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$252";
					sb = "$248 ";
					break;

				case 3: // '\003'
					s = (new StringBuilder()).append(
							pm + item.getEnchantLevel()).append(" ").append(s1)
							.toString(); // \f1%0が%2%1光ります。
					sa = "$252";
					sb = "$248 ";
					break;
				}
			}
		}
		pc.sendPackets(new S_ServerMessage(161, s, sa, sb));
		int oldEnchantLvl = item.getEnchantLevel();
		int newEnchantLvl = item.getEnchantLevel() + i;
		item.setEnchantLevel(newEnchantLvl);
		client.getActiveChar().getInventory().updateItem(item,
				L1PcInventory.COL_ENCHANTLVL);
		if (item.getItem().getType2() == 1
				&& Config.LOGGING_WEAPON_ENCHANT != 0) {
			int safe_enchant = item.getItem().get_safeenchant();
			if (safe_enchant == 0
					|| newEnchantLvl >= Config.LOGGING_WEAPON_ENCHANT) {
				LogEnchantTable logenchant = new LogEnchantTable();
				logenchant.storeLogEnchant(pc.getId(), item.getId(),
						oldEnchantLvl, newEnchantLvl);
			}
		}
		if (item.getItem().getType2() == 2 && Config.LOGGING_ARMOR_ENCHANT != 0) {
			int safe_enchant = item.getItem().get_safeenchant();
			if (safe_enchant == 0
					|| newEnchantLvl >= Config.LOGGING_ARMOR_ENCHANT) {
				LogEnchantTable logenchant = new LogEnchantTable();
				logenchant.storeLogEnchant(pc.getId(), item.getId(),
						oldEnchantLvl, newEnchantLvl);
			}
		}

		if (item.getItem().getType2() == 2) {
			if (item.isEquipped()) {
				pc.addAc(-i);
				int i2 = item.getItem().getItemId();
				if (i2 == 20011 || i2 == 20110 || i2 == 120011) { // マジック
					// ヘルム、マジック
					// チェーン メイル
					pc.addMr(i);
					pc.sendPackets(new S_SPMR(pc));
				}
				if (i2 == 20056 || i2 == 120056 || i2 == 220056) { // マジック クローク
					pc.addMr(i * 2);
					pc.sendPackets(new S_SPMR(pc));
				}
			}
			pc.sendPackets(new S_OwnCharStatus(pc));
		}
		pc.sendPackets(new S_SendInvStatusUpdate(pc, item));
	}

	private void FailureEnchant(L1PcInstance pc, L1ItemInstance item,
			ClientThread client) {
		String s = "";
		String sa = "";
		int itemType = item.getItem().getType2();
		String nameId = item.get_itemnameid();
		String pm = "";
		int objId = item.getId();
		int itemId = item.getItem().getItemId();
		if (itemType == 1) { // 武器
			if (!item.isIdentified() || item.getEnchantLevel() == 0) {
				s = nameId; // \f1%0が強烈に%1光ったあと、蒸発してなくなります。
				sa = "$245";
			} else {
				if (item.getEnchantLevel() > 0) {
					pm = "+";
				}
				s = (new StringBuilder()).append(pm + item.getEnchantLevel())
						.append(" ").append(nameId).toString(); // \f1%0が強烈に%1光ったあと、蒸発してなくなります。
				sa = "$245";
			}
		} else if (itemType == 2) { // 防具
			if (!item.isIdentified() || item.getEnchantLevel() == 0) {
				s = nameId; // \f1%0が強烈に%1光ったあと、蒸発してなくなります。
				sa = " $252";
			} else {
				if (item.getEnchantLevel() > 0) {
					pm = "+";
				}
				s = (new StringBuilder()).append(pm + item.getEnchantLevel())
						.append(" ").append(nameId).toString(); // \f1%0が強烈に%1光ったあと、蒸発してなくなります。
				sa = " $252";
			}
		}
		pc.sendPackets(new S_ServerMessage(164, s, sa));
		if (item.isEquipped()) { // 装備していた場合
			if (itemType == 1) { // 武器
				pc.getInventory().setEquipped(item, false);
			}
			if (itemType == 2) { // 防具
				pc.getInventory().setEquipped(item, false);
			}
			pc.sendPackets(new S_CharVisualUpdate(pc));
		}
		pc.sendPackets(new S_DeleteInventoryItem(pc, item));
		client.getActiveChar().getInventory().deleteItem(item);
		L1World.getInstance().removeObject(item);
		pc.sendPackets(new S_OwnCharStatus(pc));
	}

	private int EnchantChance(L1ItemInstance l1iteminstance) {
		byte byte0 = 0;
		int i = l1iteminstance.getEnchantLevel();
		if (l1iteminstance.getItem().getType2() == 1) {
			switch (i) {
			case 0: // '\0'
				byte0 = 50;
				break;

			case 1: // '\001'
				byte0 = 33;
				break;

			case 2: // '\002'
				byte0 = 25;
				break;

			case 3: // '\003'
				byte0 = 25;
				break;

			case 4: // '\004'
				byte0 = 25;
				break;

			case 5: // '\005'
				byte0 = 20;
				break;

			case 6: // '\006'
				byte0 = 33;
				break;

			case 7: // '\007'
				byte0 = 33;
				break;

			case 8: // '\b'
				byte0 = 33;
				break;

			case 9: // '\t'
				byte0 = 25;
				break;

			case 10: // '\n'
				byte0 = 20;
				break;
			}
		} else if (l1iteminstance.getItem().getType2() == 2) {
			switch (i) {
			case 0: // '\0'
				byte0 = 50;
				break;

			case 1: // '\001'
				byte0 = 33;
				break;

			case 2: // '\002'
				byte0 = 25;
				break;

			case 3: // '\003'
				byte0 = 25;
				break;

			case 4: // '\004'
				byte0 = 25;
				break;

			case 5: // '\005'
				byte0 = 20;
				break;

			case 6: // '\006'
				byte0 = 17;
				break;

			case 7: // '\007'
				byte0 = 14;
				break;

			case 8: // '\b'
				byte0 = 12;
				break;

			case 9: // '\t'
				byte0 = 11;
				break;
			}
		}
		return byte0;
	}

	private void UseHeallingPotion(L1PcInstance pc, int healHp, int gfxid) {
		if (pc.hasSkillEffect(71) == true) { // ディケイ ポーションの状態
			pc.sendPackets(new S_ServerMessage(698)); // 魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		pc.sendPackets(new S_SkillSound(pc.getId(), gfxid));
		pc.broadcastPacket(new S_SkillSound(pc.getId(), gfxid));
		pc.sendPackets(new S_ServerMessage(77)); // \f1気分が良くなりました。
		Random random = new Random();
		healHp *= (random.nextGaussian() / 5.0D) + 1.0D;
		if (pc.hasSkillEffect(POLLUTE_WATER)) { // ポルートウォーター中は回復量1/2倍
			healHp /= 2;
		}
		pc.setCurrentHp(pc.getCurrentHp() + healHp);
	}

	private void useGreenPotion(L1PcInstance pc, int itemId) {
		if (pc.hasSkillEffect(71) == true) { // ディケイポーションの状態
			pc.sendPackets(new S_ServerMessage(698)); // \f1魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		int time = 0;
		if (itemId == L1ItemId.POTION_OF_HASTE_SELF) { // グリーン ポーション
			time = 300;
		} else if (itemId == L1ItemId.B_POTION_OF_HASTE_SELF) { // 祝福されたグリーン
			// ポーション
			time = 350;
		} else if (itemId == 40018) { // 強化グリーン ポーション
			time = 1800;
		} else if (itemId == 140018) { // 祝福された強化グリーン ポーション
			time = 2100;
		} else if (itemId == 40039) { // ワイン
			time = 600;
		} else if (itemId == 40040) { // ウイスキー
			time = 900;
		} else if (itemId == 40030) { // 象牙の塔のヘイスト ポーション
			time = 300;
		}

		pc.sendPackets(new S_SkillSound(pc.getId(), 191));
		pc.broadcastPacket(new S_SkillSound(pc.getId(), 191));
		// XXX:ヘイストアイテム装備時、酔った状態が解除されるのか不明
		if (pc.getHasteItemEquipped() > 0) {
			return;
		}
		// 酔った状態を解除
		pc.setDrink(false);

		// ヘイスト、グレーターヘイストとは重複しない
		if (pc.hasSkillEffect(HASTE)) {
			pc.killSkillEffectTimer(HASTE);
			pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0));
			pc.setMoveSpeed(0);
		} else if (pc.hasSkillEffect(GREATER_HASTE)) {
			pc.killSkillEffectTimer(GREATER_HASTE);
			pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0));
			pc.setMoveSpeed(0);
		}

		// スロー、マス スロー、エンタングル中はスロー状態を解除するだけ
		if (pc.hasSkillEffect(SLOW)) { // スロー
			pc.killSkillEffectTimer(SLOW);
			pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0));
			pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0));
		} else if (pc.hasSkillEffect(MASS_SLOW)) { // マス スロー
			pc.killSkillEffectTimer(MASS_SLOW);
			pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0));
			pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0));
		} else if (pc.hasSkillEffect(ENTANGLE)) { // エンタングル
			pc.killSkillEffectTimer(ENTANGLE);
			pc.sendPackets(new S_SkillHaste(pc.getId(), 0, 0));
			pc.broadcastPacket(new S_SkillHaste(pc.getId(), 0, 0));
		} else {
			pc.sendPackets(new S_SkillHaste(pc.getId(), 1, time));
			pc.broadcastPacket(new S_SkillHaste(pc.getId(), 1, 0));
			pc.setMoveSpeed(1);
			pc.setSkillEffect(STATUS_HASTE, time * 1000);
		}
	}

	private void useBravePotion(L1PcInstance pc, int item_id) {
		if (pc.hasSkillEffect(71) == true) { // ディケイポーションの状態
			pc.sendPackets(new S_ServerMessage(698)); // \f1魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		int time = 0;
		if (item_id == L1ItemId.POTION_OF_EMOTION_BRAVERY) { // ブレイブ ポーション
			time = 300;
		} else if (item_id == L1ItemId.B_POTION_OF_EMOTION_BRAVERY) { // 祝福されたブレイブ
			// ポーション
			time = 350;
		} else if (item_id == 40068) { // エルヴン ワッフル
			time = 600;
			if (pc.hasSkillEffect(WIND_WALK)) { // ウィンドウォークとは重複しない
				pc.killSkillEffectTimer(WIND_WALK);
				pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
				pc.setBraveSpeed(0);
			}
		} else if (item_id == 140068) { // 祝福されたエルヴン ワッフル
			time = 700;
			if (pc.hasSkillEffect(WIND_WALK)) { // ウィンドウォークとは重複しない
				pc.killSkillEffectTimer(WIND_WALK);
				pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
				pc.setBraveSpeed(0);
			}
		} else if (item_id == 40031) { // イビル ブラッド
			time = 600;
		} else if (item_id == 40733) { // 名誉のコイン
			time = 600;
			if (pc.hasSkillEffect(HOLY_WALK)) { // ホーリーウォークとは重複しない
				pc.killSkillEffectTimer(HOLY_WALK);
				pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
				pc.setBraveSpeed(0);
			}
			if (pc.hasSkillEffect(MOVING_ACCELERATION)) { // ムービングアクセレーションとは重複しない
				pc.killSkillEffectTimer(MOVING_ACCELERATION);
				pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
				pc.setBraveSpeed(0);
			}
			if (pc.hasSkillEffect(WIND_WALK)) { // ウィンドウォークとは重複しない
				pc.killSkillEffectTimer(WIND_WALK);
				pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
				pc.setBraveSpeed(0);
			}
			if (pc.hasSkillEffect(STATUS_WISDOM_POTION)) { // ウィズダムポーションとは重複しない
				pc.killSkillEffectTimer(STATUS_WISDOM_POTION);
				pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
				pc.addSp(-2);
			}
		}

		if (item_id == 40068 || item_id == 140068 // エルヴン ワッフル
				|| item_id == 40733 && pc.isElf()) { // エルフが名誉のコインを使用
			pc.sendPackets(new S_SkillBrave(pc.getId(), 3, time));
		} else {
			pc.sendPackets(new S_SkillBrave(pc.getId(), 1, time));
		}
		pc.sendPackets(new S_SkillSound(pc.getId(), 751));
		pc.broadcastPacket(new S_SkillSound(pc.getId(), 751));
		pc.setBraveSpeed(1);

		pc.setSkillEffect(STATUS_BRAVE, time * 1000);
	}

	private void useBluePotion(L1PcInstance pc, int item_id) {
		if (pc.hasSkillEffect(DECAY_POTION)) { // ディケイポーションの状態
			pc.sendPackets(new S_ServerMessage(698)); // \f1魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		int time = 0;
		if (item_id == 40015 || item_id == 40736) { // ブルーポーション、知恵のコイン
			time = 600;
		} else if (item_id == 140015) { // 祝福されたブルー ポーション
			time = 700;
		} else {
			return;
		}

		pc.sendPackets(new S_SkillIconGFX(34, time));
		pc.sendPackets(new S_SkillSound(pc.getId(), 190));
		pc.broadcastPacket(new S_SkillSound(pc.getId(), 190));

		pc.setSkillEffect(STATUS_BLUE_POTION, time * 1000);

		pc.sendPackets(new S_ServerMessage(1007)); // MPの回復速度が速まります。
	}

	private void useWisdomPotion(L1PcInstance pc, int item_id) {
		if (pc.hasSkillEffect(71) == true) { // ディケイポーションの状態
			pc.sendPackets(new S_ServerMessage(698)); // \f1魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		int time = 0;
		if (item_id == L1ItemId.POTION_OF_EMOTION_WISDOM) { // ウィズダム ポーション
			time = 300;
		} else if (item_id == L1ItemId.B_POTION_OF_EMOTION_WISDOM) { // 祝福されたウィズダム
			// ポーション
			time = 350;
		}

		if (pc.hasSkillEffect(HOLY_WALK)) { // ホーリーウォークとは重複しない
			pc.killSkillEffectTimer(HOLY_WALK);
			pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
			pc.setBraveSpeed(0);
		}
		if (pc.hasSkillEffect(STATUS_BRAVE)) { // ワインとは重複しない
			pc.killSkillEffectTimer(STATUS_BRAVE);
			pc.sendPackets(new S_SkillBrave(pc.getId(), 0, 0));
			pc.setBraveSpeed(0);
		}

		if (!pc.hasSkillEffect(STATUS_WISDOM_POTION)) {
			pc.addSp(2);
		}

		pc.sendPackets(new S_SkillBrave(pc.getId(), 2, time));
		pc.sendPackets(new S_SkillSound(pc.getId(), 750));
		pc.broadcastPacket(new S_SkillSound(pc.getId(), 750));

		pc.setSkillEffect(STATUS_WISDOM_POTION, time * 1000);

		pc.sendPackets(new S_ServerMessage(348)); // 気分がゆったりとし、集中力が高まるのを感じます。
	}

	private void useBlessOfEva(L1PcInstance pc, int item_id) {
		if (pc.hasSkillEffect(71) == true) { // ディケイポーションの状態
			pc.sendPackets(new S_ServerMessage(698)); // \f1魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		int time = 0;
		if (item_id == 40032) { // エヴァの祝福
			time = 1800;
		} else if (item_id == 40041) { // マーメイドの鱗
			time = 300;
		} else {
			return;
		}

		if (pc.hasSkillEffect(STATUS_UNDERWATER_BREATH)) {
			int timeSec = pc.getSkillEffectTimeSec(STATUS_UNDERWATER_BREATH);
			time += timeSec;
			if (time > 3600) {
				time = 3600;
			}
		}
		pc.sendPackets(new S_SkillIconBlessOfEva(pc.getId(), time));
		pc.sendPackets(new S_SkillSound(pc.getId(), 190));
		pc.broadcastPacket(new S_SkillSound(pc.getId(), 190));
		pc.setSkillEffect(STATUS_UNDERWATER_BREATH, time * 1000);
	}

	private void useBlindPotion(L1PcInstance pc) {
		if (pc.hasSkillEffect(DECAY_POTION)) {
			pc.sendPackets(new S_ServerMessage(698)); // \f1魔力によって何も飲むことができません。
			return;
		}

		// アブソルート バリアの解除
		CancelAbsoluteBarrier(pc);

		int time = 16;
		if (pc.hasSkillEffect(CURSE_BLIND)) {
			pc.killSkillEffectTimer(CURSE_BLIND);
		} else if (pc.hasSkillEffect(DARKNESS)) {
			pc.killSkillEffectTimer(DARKNESS);
		}

		if (pc.hasSkillEffect(STATUS_FLOATING_EYE)) {
			pc.sendPackets(new S_CurseBlind(2));
		} else {
			pc.sendPackets(new S_CurseBlind(1));
		}

		pc.setSkillEffect(CURSE_BLIND, time * 1000);
	}

	private boolean usePolyScroll(L1PcInstance pc, int item_id, String s) {
		int time = 0;
		if (item_id == 40088 || item_id == 40096) { // 変身スクロール、象牙の塔の変身スクロール
			time = 1800;
		} else if (item_id == 140088) { // 祝福された変身スクロール
			time = 2100;
		}

		L1PolyMorph poly = PolyTable.getInstance().getTemplate(s);
		if (poly != null || s.equals("")) {
			if (s.equals("")) {
				pc.removeSkillEffect(SHAPE_CHANGE);
				return true;
			} else if (poly.getMinLevel() <= pc.getLevel() || pc.isGm()) {
				L1PolyMorph.doPoly(pc, poly.getPolyId(), time);
				return true;
			} else {
				return false;
			}
		} else {
			return false;
		}
	}

	private void usePolyScale(L1PcInstance pc, int itemId) {
		int polyId = 0;
		if (itemId == 41154) { // 闇の鱗
			polyId = 3101;
		} else if (itemId == 41155) { // 烈火の鱗
			polyId = 3126;
		} else if (itemId == 41156) { // 背徳者の鱗
			polyId = 3888;
		} else if (itemId == 41157) { // 憎悪の鱗
			polyId = 3784;
		}
		L1PolyMorph.doPoly(pc, polyId, 600);
	}

	private void UseArmor(L1PcInstance activeChar, L1ItemInstance armor) {
		int itemid = armor.getItem().getItemId();
		int type = armor.getItem().getType();
		L1PcInventory pcInventory = activeChar.getInventory();
		boolean equipeSpace; // 装備する箇所が空いているか
		if (type == 9) { // リングの場合
			equipeSpace = pcInventory.getTypeEquipped(2, 9) <= 1;
		} else {
			equipeSpace = pcInventory.getTypeEquipped(2, type) <= 0;
		}

		if (equipeSpace && !armor.isEquipped()) { // 使用した防具を装備していなくて、その装備箇所が空いている場合（装着を試みる）
			int polyid = activeChar.getTempCharGfx();

			if (!L1PolyMorph.isEquipableArmor(polyid, type)) { // その変身では装備不可
				return;
			}

			if (type == 7 && activeChar.getWeapon() != null) { // シールドの場合、武器を装備していたら両手武器チェック
				int weapon_type = activeChar.getWeapon().getItem().getType();
				if (weapon_type == 4 || weapon_type == 5 || weapon_type == 3
						|| weapon_type == 11 || weapon_type == 12
						|| weapon_type == 15 || weapon_type == 16) { // 両手武器
					activeChar.sendPackets(new S_ServerMessage(129)); // \f1両手の武器を武装したままシールドを着用することはできません。
					return;
				}
			}

			if (type == 3 && pcInventory.getTypeEquipped(2, 4) >= 1) { // シャツの場合、マントを着てないか確認
				activeChar
						.sendPackets(new S_ServerMessage(126, "$224", "$225")); // \f1%1上に%0を着ることはできません。
				return;
			} else if ((type == 3) && pcInventory.getTypeEquipped(2, 2) >= 1) { // シャツの場合、メイルを着てないか確認
				activeChar
						.sendPackets(new S_ServerMessage(126, "$224", "$226")); // \f1%1上に%0を着ることはできません。
				return;
			} else if ((type == 2) && pcInventory.getTypeEquipped(2, 4) >= 1) { // メイルの場合、マントを着てないか確認
				activeChar
						.sendPackets(new S_ServerMessage(126, "$226", "$225")); // \f1%1上に%0を着ることはできません。
				return;
			}

			CancelAbsoluteBarrier(activeChar); // アブソルート バリアの解除

			pcInventory.setEquipped(armor, true);
		} else if (armor.isEquipped()) { // 使用した防具を装備していた場合（脱着を試みる）
			if (armor.getItem().getBless() == 2) { // 呪われていた場合
				activeChar.sendPackets(new S_ServerMessage(150)); // \f1はずすことができません。呪いをかけられているようです。
				return;
			}
			if (type == 3 && pcInventory.getTypeEquipped(2, 2) >= 1) { // シャツの場合、メイルを着てないか確認
				activeChar.sendPackets(new S_ServerMessage(127)); // \f1それは脱ぐことができません。
				return;
			} else if ((type == 2 || type == 3)
					&& pcInventory.getTypeEquipped(2, 4) >= 1) { // シャツとメイルの場合、マントを着てないか確認
				activeChar.sendPackets(new S_ServerMessage(127)); // \f1それは脱ぐことができません。
				return;
			}

			pcInventory.setEquipped(armor, false);
		} else {
			activeChar.sendPackets(new S_ServerMessage(124)); // \f1すでに何かを装備しています。
		}
		// セット装備用HP、MP、MR更新
		activeChar.setCurrentHp(activeChar.getCurrentHp());
		activeChar.setCurrentMp(activeChar.getCurrentMp());
		activeChar.sendPackets(new S_OwnCharAttrDef(activeChar));
		activeChar.sendPackets(new S_OwnCharStatus(activeChar));
		activeChar.sendPackets(new S_SPMR(activeChar));
	}

	private void UseWeapon(L1PcInstance activeChar, L1ItemInstance weapon) {
		L1PcInventory pcInventory = activeChar.getInventory();
		if (activeChar.getWeapon() == null
				|| !activeChar.getWeapon().equals(weapon)) { // 指定された武器が装備している武器と違う場合、装備できるか確認
			int weapon_type = weapon.getItem().getType();
			int polyid = activeChar.getTempCharGfx();

			if (!L1PolyMorph.isEquipableWeapon(polyid, weapon_type)) { // その変身では装備不可
				return;
			}
			if ((weapon_type == 4 || weapon_type == 5 || weapon_type == 3
					|| weapon_type == 11 || weapon_type == 12
					|| weapon_type == 15 || weapon_type == 16)
					&& pcInventory.getTypeEquipped(2, 7) >= 1) { // 両手武器の場合、シールド装備の確認
				activeChar.sendPackets(new S_ServerMessage(128)); // \f1シールドを装備している時は両手で持つ武器を使うことはできません。
				return;
			}
		}

		CancelAbsoluteBarrier(activeChar); // アブソルート バリアの解除

		if (activeChar.getWeapon() != null) { // 既に何かを装備している場合、前の装備をはずす
			if (activeChar.getWeapon().getItem().getBless() == 2) { // 呪われていた場合
				activeChar.sendPackets(new S_ServerMessage(150)); // \f1はずすことができません。呪いをかけられているようです。
				return;
			}
			if (activeChar.getWeapon().equals(weapon)) {
				// 装備交換ではなく外すだけ
				pcInventory.setEquipped(activeChar.getWeapon(), false, false,
						false);
				return;
			} else {
				pcInventory.setEquipped(activeChar.getWeapon(), false, false,
						true);
			}
		}

		if (weapon.getItemId() == 200002) { // 呪われたダイスダガー
			activeChar.sendPackets(new S_ServerMessage(149, weapon
					.getViewMessageName())); // \f1%0が手にくっつきました。
		}
		pcInventory.setEquipped(weapon, true, false, false);
	}

	private int RandomELevel(L1ItemInstance item, int itemId) {
		if (itemId == L1ItemId.B_SCROLL_OF_ENCHANT_ARMOR
				|| itemId == L1ItemId.B_SCROLL_OF_ENCHANT_WEAPON) {
			if (item.getEnchantLevel() <= 2) {
				Random random = new Random();
				int j = random.nextInt(100) + 1;
				if (j < 32) {
					return 1;
				} else if (j >= 33 && j <= 76) {
					return 2;
				} else if (j >= 77 && j <= 100) {
					return 3;
				}
			} else if (item.getEnchantLevel() >= 3
					&& item.getEnchantLevel() <= 5) {
				Random random = new Random();
				int j = random.nextInt(100) + 1;
				if (j < 50) {
					return 2;
				} else {
					return 1;
				}
			}
			{
				return 1;
			}
		}
		if (itemId == 140129 || itemId == 140130) {
			if (item.getEnchantLevel() <= 2) {
				return 3;
			} else if (item.getEnchantLevel() >= 3
					&& item.getEnchantLevel() <= 5) {
				return 2;
			}
			{
				return 1;
			}
		} else {
			return 1;
		}
	}

	private void SpellBook(L1PcInstance pc, L1ItemInstance item,
			ClientThread client, boolean isLawful) {
		String s = "";
		int i = 0;
		int level1 = 0;
		int level2 = 0;
		int l = 0;
		int i1 = 0;
		int j1 = 0;
		int k1 = 0;
		int l1 = 0;
		int i2 = 0;
		int j2 = 0;
		int k2 = 0;
		int l2 = 0;
		int i3 = 0;
		int j3 = 0;
		int k3 = 0;
		int l3 = 0;
		int i4 = 0;
		int j4 = 0;
		int k4 = 0;
		int l4 = 0;
		int i5 = 0;
		int j5 = 0;
		int k5 = 0;
		int l5 = 0;
		int i6 = 0;
		for (int skillId = 1; skillId < 81; skillId++) {
			L1Skills l1skills = SkillsTable.getInstance().getTemplate(skillId);
			String s1 = "魔法書(" + l1skills.getName() + ")";
			if (item.getItem().getName().equalsIgnoreCase(s1)) {
				int skillLevel = l1skills.getSkillLevel();
				int i7 = l1skills.getId();
				s = l1skills.getName();
				i = l1skills.getSkillId();
				switch (skillLevel) {
				case 1: // '\001'
					level1 = i7;
					break;

				case 2: // '\002'
					level2 = i7;
					break;

				case 3: // '\003'
					l = i7;
					break;

				case 4: // '\004'
					i1 = i7;
					break;

				case 5: // '\005'
					j1 = i7;
					break;

				case 6: // '\006'
					k1 = i7;
					break;

				case 7: // '\007'
					l1 = i7;
					break;

				case 8: // '\b'
					i2 = i7;
					break;

				case 9: // '\t'
					j2 = i7;
					break;

				case 10: // '\n'
					k2 = i7;
					break;

				case 11: // '\013'
					l2 = i7;
					break;

				case 12: // '\f'
					i3 = i7;
					break;

				case 13: // '\r'
					j3 = i7;
					break;

				case 14: // '\016'
					k3 = i7;
					break;

				case 15: // '\017'
					l3 = i7;
					break;

				case 16: // '\020'
					i4 = i7;
					break;

				case 17: // '\021'
					j4 = i7;
					break;

				case 18: // '\022'
					k4 = i7;
					break;

				case 19: // '\023'
					l4 = i7;
					break;

				case 20: // '\024'
					i5 = i7;
					break;

				case 21: // '\025'
					j5 = i7;
					break;

				case 22: // '\026'
					k5 = i7;
					break;

				case 23: // '\027'
					l5 = i7;
					break;

				case 24: // '\030'
					i6 = i7;
					break;
				}
			}
		}

		int objid = pc.getId();
		pc
				.sendPackets(new S_AddSkill(level1, level2, l, i1, j1, k1, l1,
						i2, j2, k2, l2, i3, j3, k3, l3, i4, j4, k4, l4, i5, j5,
						k5, l5, i6));
		S_SkillSound s_skillSound = new S_SkillSound(objid, isLawful ? 224
				: 231);
		pc.sendPackets(s_skillSound);
		pc.broadcastPacket(s_skillSound);
		SkillsTable.getInstance().spellMastery(objid, i, s, 0, 0);
		pc.getInventory().removeItem(item, 1);
	}

	private void SpellBook1(L1PcInstance pc, L1ItemInstance l1iteminstance,
			ClientThread clientthread) {
		String s = "";
		int i = 0;
		int j = 0;
		int k = 0;
		int l = 0;
		int i1 = 0;
		int j1 = 0;
		int k1 = 0;
		int l1 = 0;
		int i2 = 0;
		int j2 = 0;
		int k2 = 0;
		int l2 = 0;
		int i3 = 0;
		int j3 = 0;
		int k3 = 0;
		int l3 = 0;
		int i4 = 0;
		int j4 = 0;
		int k4 = 0;
		int l4 = 0;
		int i5 = 0;
		int j5 = 0;
		int k5 = 0;
		int l5 = 0;
		int i6 = 0;
		for (int j6 = 97; j6 < 112; j6++) {
			L1Skills l1skills = SkillsTable.getInstance().getTemplate(j6);
			String s1 = "闇精霊の水晶(" + l1skills.getName() + ")";
			if (l1iteminstance.getItem().getName().equalsIgnoreCase(s1)) {
				int l6 = l1skills.getSkillLevel();
				int i7 = l1skills.getId();
				s = l1skills.getName();
				i = l1skills.getSkillId();
				switch (l6) {
				case 1: // '\001'
					j = i7;
					break;

				case 2: // '\002'
					k = i7;
					break;

				case 3: // '\003'
					l = i7;
					break;

				case 4: // '\004'
					i1 = i7;
					break;

				case 5: // '\005'
					j1 = i7;
					break;

				case 6: // '\006'
					k1 = i7;
					break;

				case 7: // '\007'
					l1 = i7;
					break;

				case 8: // '\b'
					i2 = i7;
					break;

				case 9: // '\t'
					j2 = i7;
					break;

				case 10: // '\n'
					k2 = i7;
					break;

				case 11: // '\013'
					l2 = i7;
					break;

				case 12: // '\f'
					i3 = i7;
					break;

				case 13: // '\r'
					j3 = i7;
					break;

				case 14: // '\016'
					k3 = i7;
					break;

				case 15: // '\017'
					l3 = i7;
					break;

				case 16: // '\020'
					i4 = i7;
					break;

				case 17: // '\021'
					j4 = i7;
					break;

				case 18: // '\022'
					k4 = i7;
					break;

				case 19: // '\023'
					l4 = i7;
					break;

				case 20: // '\024'
					i5 = i7;
					break;

				case 21: // '\025'
					j5 = i7;
					break;

				case 22: // '\026'
					k5 = i7;
					break;

				case 23: // '\027'
					l5 = i7;
					break;

				case 24: // '\030'
					i6 = i7;
					break;
				}
			}
		}

		int k6 = pc.getId();
		pc.sendPackets(new S_AddSkill(j, k, l, i1, j1, k1, l1, i2, j2, k2, l2,
				i3, j3, k3, l3, i4, j4, k4, l4, i5, j5, k5, l5, i6));
		S_SkillSound s_skillSound = new S_SkillSound(k6, 231);
		pc.sendPackets(s_skillSound);
		pc.broadcastPacket(s_skillSound);
		SkillsTable.getInstance().spellMastery(k6, i, s, 0, 0);
		pc.getInventory().removeItem(l1iteminstance, 1);
	}

	private void SpellBook2(L1PcInstance pc, L1ItemInstance l1iteminstance,
			ClientThread clientthread) {
		String s = "";
		int i = 0;
		int j = 0;
		int k = 0;
		int l = 0;
		int i1 = 0;
		int j1 = 0;
		int k1 = 0;
		int l1 = 0;
		int i2 = 0;
		int j2 = 0;
		int k2 = 0;
		int l2 = 0;
		int i3 = 0;
		int j3 = 0;
		int k3 = 0;
		int l3 = 0;
		int i4 = 0;
		int j4 = 0;
		int k4 = 0;
		int l4 = 0;
		int i5 = 0;
		int j5 = 0;
		int k5 = 0;
		int l5 = 0;
		int i6 = 0;
		for (int j6 = 129; j6 <= 176; j6++) {
			L1Skills l1skills = SkillsTable.getInstance().getTemplate(j6);
			String s1 = "精霊の水晶(" + l1skills.getName() + ")";
			if (l1iteminstance.getItem().getName().equalsIgnoreCase(s1)) {
				if (pc.getAccessLevel() != 200 && l1skills.getAttr() != 0
						&& pc.getElfAttr() != l1skills.getAttr()) {
					if (pc.getElfAttr() == 0 || pc.getElfAttr() == 1
							|| pc.getElfAttr() == 2 || pc.getElfAttr() == 4
							|| pc.getElfAttr() == 8) { // 属性値が異常な場合は全属性を覚えられるようにしておく
						pc.sendPackets(new S_ServerMessage(79));
						return;
					}
				}
				int l6 = l1skills.getSkillLevel();
				int i7 = l1skills.getId();
				s = l1skills.getName();
				i = l1skills.getSkillId();
				switch (l6) {
				case 1: // '\001'
					j = i7;
					break;

				case 2: // '\002'
					k = i7;
					break;

				case 3: // '\003'
					l = i7;
					break;

				case 4: // '\004'
					i1 = i7;
					break;

				case 5: // '\005'
					j1 = i7;
					break;

				case 6: // '\006'
					k1 = i7;
					break;

				case 7: // '\007'
					l1 = i7;
					break;

				case 8: // '\b'
					i2 = i7;
					break;

				case 9: // '\t'
					j2 = i7;
					break;

				case 10: // '\n'
					k2 = i7;
					break;

				case 11: // '\013'
					l2 = i7;
					break;

				case 12: // '\f'
					i3 = i7;
					break;

				case 13: // '\r'
					j3 = i7;
					break;

				case 14: // '\016'
					k3 = i7;
					break;

				case 15: // '\017'
					l3 = i7;
					break;

				case 16: // '\020'
					i4 = i7;
					break;

				case 17: // '\021'
					j4 = i7;
					break;

				case 18: // '\022'
					k4 = i7;
					break;

				case 19: // '\023'
					l4 = i7;
					break;

				case 20: // '\024'
					i5 = i7;
					break;

				case 21: // '\025'
					j5 = i7;
					break;

				case 22: // '\026'
					k5 = i7;
					break;

				case 23: // '\027'
					l5 = i7;
					break;

				case 24: // '\030'
					i6 = i7;
					break;
				}
			}
		}

		int k6 = pc.getId();
		pc.sendPackets(new S_AddSkill(j, k, l, i1, j1, k1, l1, i2, j2, k2, l2,
				i3, j3, k3, l3, i4, j4, k4, l4, i5, j5, k5, l5, i6));
		S_SkillSound s_skillSound = new S_SkillSound(k6, 224);
		pc.sendPackets(s_skillSound);
		pc.broadcastPacket(s_skillSound);
		SkillsTable.getInstance().spellMastery(k6, i, s, 0, 0);
		pc.getInventory().removeItem(l1iteminstance, 1);
	}

	private void SpellBook3(L1PcInstance pc, L1ItemInstance l1iteminstance,
			ClientThread clientthread) {
		String s = "";
		int i = 0;
		int j = 0;
		int k = 0;
		int l = 0;
		int i1 = 0;
		int j1 = 0;
		int k1 = 0;
		int l1 = 0;
		int i2 = 0;
		int j2 = 0;
		int k2 = 0;
		int l2 = 0;
		int i3 = 0;
		int j3 = 0;
		int k3 = 0;
		int l3 = 0;
		int i4 = 0;
		int j4 = 0;
		int k4 = 0;
		int l4 = 0;
		int i5 = 0;
		int j5 = 0;
		int k5 = 0;
		int l5 = 0;
		int i6 = 0;
		for (int j6 = 87; j6 <= 91; j6++) {
			L1Skills l1skills = SkillsTable.getInstance().getTemplate(j6);
			String s1 = (new StringBuilder()).append("技術書(").append(
					l1skills.getName()).append(")").toString();
			if (l1iteminstance.getItem().getName().equalsIgnoreCase(s1)) {
				int l6 = l1skills.getSkillLevel();
				int i7 = l1skills.getId();
				s = l1skills.getName();
				i = l1skills.getSkillId();
				switch (l6) {
				case 1: // '\001'
					j = i7;
					break;

				case 2: // '\002'
					k = i7;
					break;

				case 3: // '\003'
					l = i7;
					break;

				case 4: // '\004'
					i1 = i7;
					break;

				case 5: // '\005'
					j1 = i7;
					break;

				case 6: // '\006'
					k1 = i7;
					break;

				case 7: // '\007'
					l1 = i7;
					break;

				case 8: // '\b'
					i2 = i7;
					break;

				case 9: // '\t'
					j2 = i7;
					break;

				case 10: // '\n'
					k2 = i7;
					break;

				case 11: // '\013'
					l2 = i7;
					break;

				case 12: // '\f'
					i3 = i7;
					break;

				case 13: // '\r'
					j3 = i7;
					break;

				case 14: // '\016'
					k3 = i7;
					break;

				case 15: // '\017'
					l3 = i7;
					break;

				case 16: // '\020'
					i4 = i7;
					break;

				case 17: // '\021'
					j4 = i7;
					break;

				case 18: // '\022'
					k4 = i7;
					break;

				case 19: // '\023'
					l4 = i7;
					break;

				case 20: // '\024'
					i5 = i7;
					break;

				case 21: // '\025'
					j5 = i7;
					break;

				case 22: // '\026'
					k5 = i7;
					break;

				case 23: // '\027'
					l5 = i7;
					break;

				case 24: // '\030'
					i6 = i7;
					break;
				}
			}
		}

		int k6 = pc.getId();
		pc.sendPackets(new S_AddSkill(j, k, l, i1, j1, k1, l1, i2, j2, k2, l2,
				i3, j3, k3, l3, i4, j4, k4, l4, i5, j5, k5, l5, i6));
		S_SkillSound s_skillSound = new S_SkillSound(k6, 224);
		pc.sendPackets(s_skillSound);
		pc.broadcastPacket(s_skillSound);
		SkillsTable.getInstance().spellMastery(k6, i, s, 0, 0);
		pc.getInventory().removeItem(l1iteminstance, 1);
	}

	private void SpellBook4(L1PcInstance pc, L1ItemInstance l1iteminstance,
			ClientThread clientthread) {
		String s = "";
		int i = 0;
		int j = 0;
		int k = 0;
		int l = 0;
		int i1 = 0;
		int j1 = 0;
		int k1 = 0;
		int l1 = 0;
		int i2 = 0;
		int j2 = 0;
		int k2 = 0;
		int l2 = 0;
		int i3 = 0;
		int j3 = 0;
		int k3 = 0;
		int l3 = 0;
		int i4 = 0;
		int j4 = 0;
		int k4 = 0;
		int l4 = 0;
		int i5 = 0;
		int j5 = 0;
		int k5 = 0;
		int l5 = 0;
		int i6 = 0;
		for (int j6 = 113; j6 < 121; j6++) {
			L1Skills l1skills = SkillsTable.getInstance().getTemplate(j6);
			String s1 = "魔法書(" + l1skills.getName() + ")";
			if (l1iteminstance.getItem().getName().equalsIgnoreCase(s1)) {
				int l6 = l1skills.getSkillLevel();
				int i7 = l1skills.getId();
				s = l1skills.getName();
				i = l1skills.getSkillId();
				switch (l6) {
				case 1: // '\001'
					j = i7;
					break;

				case 2: // '\002'
					k = i7;
					break;

				case 3: // '\003'
					l = i7;
					break;

				case 4: // '\004'
					i1 = i7;
					break;

				case 5: // '\005'
					j1 = i7;
					break;

				case 6: // '\006'
					k1 = i7;
					break;

				case 7: // '\007'
					l1 = i7;
					break;

				case 8: // '\b'
					i2 = i7;
					break;

				case 9: // '\t'
					j2 = i7;
					break;

				case 10: // '\n'
					k2 = i7;
					break;

				case 11: // '\013'
					l2 = i7;
					break;

				case 12: // '\f'
					i3 = i7;
					break;

				case 13: // '\r'
					j3 = i7;
					break;

				case 14: // '\016'
					k3 = i7;
					break;

				case 15: // '\017'
					l3 = i7;
					break;

				case 16: // '\020'
					i4 = i7;
					break;

				case 17: // '\021'
					j4 = i7;
					break;

				case 18: // '\022'
					k4 = i7;
					break;

				case 19: // '\023'
					l4 = i7;
					break;

				case 20: // '\024'
					i5 = i7;
					break;

				case 21: // '\025'
					j5 = i7;
					break;

				case 22: // '\026'
					k5 = i7;
					break;

				case 23: // '\027'
					l5 = i7;
					break;

				case 24: // '\030'
					i6 = i7;
					break;
				}
			}
		}

		int k6 = pc.getId();
		pc.sendPackets(new S_AddSkill(j, k, l, i1, j1, k1, l1, i2, j2, k2, l2,
				i3, j3, k3, l3, i4, j4, k4, l4, i5, j5, k5, l5, i6));
		S_SkillSound s_skillSound = new S_SkillSound(k6, 224);
		pc.sendPackets(s_skillSound);
		pc.broadcastPacket(s_skillSound);
		SkillsTable.getInstance().spellMastery(k6, i, s, 0, 0);
		pc.getInventory().removeItem(l1iteminstance, 1);
	}

	private void doWandAction(L1PcInstance user, L1Object target) {
		if (user.getId() == target.getId()) {
			return; // 自分自身に当てた
		}
		if (user.glanceCheck(target.getX(), target.getY()) == false) {
			return; // 直線上に障害物がある
		}

		// XXX 適当なダメージ計算、要修正
		int dmg = (L1PcInstance.getRnd().nextInt(11) - 5) + user.getStr();
		dmg = Math.max(1, dmg);

		if (target instanceof L1PcInstance) {
			L1PcInstance pc = (L1PcInstance) target;
			if (pc.getMap().isSafetyZone(pc.getLocation())
					|| user.checkNonPvP(user, pc)) {
				// 攻撃できないゾーン
				return;
			}
			if (pc.hasSkillEffect(50) == true || pc.hasSkillEffect(78) == true
					|| pc.hasSkillEffect(157) == true) {
				// ターゲットがアイス ランス、アブソルート、バリア アース バインド状態
				return;
			}

			int newHp = pc.getCurrentHp() - dmg;
			if (newHp > 0) {
				pc.sendPackets(new S_AttackStatus(pc, 0,
						ActionCodes.ACTION_Damage));
				pc.broadcastPacket(new S_AttackStatus(pc, 0,
						ActionCodes.ACTION_Damage));
				pc.setCurrentHp(newHp);
			} else if (newHp <= 0 && pc.isGm()) {
				pc.setCurrentHp(pc.getMaxHp());
			} else if (newHp <= 0 && !pc.isGm()) {
				pc.death(user);
			}
		} else if (target instanceof L1MonsterInstance) {
			L1MonsterInstance mob = (L1MonsterInstance) target;
			mob.broadcastPacket(new S_AttackPacket(user, mob.getId(), 2));
			mob.receiveDamage(user, dmg);
		} else if (target instanceof L1NpcInstance) {
			L1NpcInstance npc = (L1NpcInstance) target;
			npc.broadcastPacket(new S_DoActionGFX(npc.getId(),
					ActionCodes.ACTION_Damage));
		}
	}

	private void polyAction(L1PcInstance attacker, L1Character cha) {
		Random random = new Random();
		if (attacker.getId() != cha.getId()) { // 自分以外
			int probability = 3 * (attacker.getLevel() - cha.getLevel()) + 100
					- cha.getMr();
			int rnd = random.nextInt(100) + 1;
			if (rnd > probability) {
				return;
			}
		}

		int[] polyArray = { 29, 945, 947, 979, 1037, 1039, 3860, 3861, 3862,
				3863, 3864, 3865, 3904, 3906, 95, 146, 2374, 2376, 2377, 2378,
				3866, 3867, 3868, 3869, 3870, 3871, 3872, 3873, 3874, 3875,
				3876 };

		int pid = random.nextInt(polyArray.length);
		int polyId = polyArray[pid];

		if (cha instanceof L1PcInstance) {
			L1PcInstance pc = (L1PcInstance) cha;
			if (pc.getInventory().checkEquipped(20281)) {
				pc.sendPackets(new S_ShowPolyList(pc.getId()));
				pc.sendPackets(new S_ServerMessage(966)); // string-j.tbl:968行目
				// 魔法の力によって保護されます。
				// 変身の際のメッセージは、他人が自分を変身させた時に出るメッセージと、レベルが足りない時に出るメッセージ以外はありません。
			} else {
				L1Skills skillTemp = SkillsTable.getInstance().getTemplate(
						SHAPE_CHANGE);

				L1PolyMorph.doPoly(pc, polyId, skillTemp.getBuffDuration());
			}
		} else if (cha instanceof L1MonsterInstance) {
			L1MonsterInstance mob = (L1MonsterInstance) cha;
			if (mob.getLevel() < 50) {
				mob.broadcastPacket(new S_ChangeShape(mob.getId(), polyId));
			}
		}
	}

	private void CancelAbsoluteBarrier(L1PcInstance pc) { // アブソルート バリアの解除
		if (pc.hasSkillEffect(ABSOLUTE_BARRIER)) {
			pc.killSkillEffectTimer(ABSOLUTE_BARRIER);
			pc.startHpRegeneration();
			pc.startMpRegeneration();
		}
	}

	private boolean createNewItem(L1PcInstance pc, int item_id, int count) {
		L1ItemInstance item = ItemTable.getInstance().createItem(item_id);
		item.setCount(count);
		if (item != null) {
			if (pc.getInventory().checkAddItem(item, count) == L1Inventory.OK) {
				pc.getInventory().storeItem(item);
			} else { // 持てない場合は地面に落とす 処理のキャンセルはしない（不正防止）
				L1World.getInstance().getInventory(pc.getX(), pc.getY(),
						pc.getMapId()).storeItem(item);
			}
			pc.sendPackets(new S_ServerMessage(403, item.getLogName())); // %0を手に入れました。
			return true;
		} else {
			return false;
		}
	}

	private void useToiTeleportAmulet(L1PcInstance pc, int itemId,
			L1ItemInstance item) {
		boolean isTeleport = false;
		if (itemId == 40289 || itemId == 40293) { // 11,51Famulet
			if (pc.getX() >= 32816 && pc.getX() <= 32821 && pc.getY() >= 32778
					&& pc.getY() <= 32783 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40290 || itemId == 40294) { // 21,61Famulet
			if (pc.getX() >= 32815 && pc.getX() <= 32820 && pc.getY() >= 32815
					&& pc.getY() <= 32820 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40291 || itemId == 40295) { // 31,71Famulet
			if (pc.getX() >= 32779 && pc.getX() <= 32784 && pc.getY() >= 32778
					&& pc.getY() <= 32783 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40292 || itemId == 40296) { // 41,81Famulet
			if (pc.getX() >= 32779 && pc.getX() <= 32784 && pc.getY() >= 32815
					&& pc.getY() <= 32820 && pc.getMapId() == 101) {
				isTeleport = true;
			}
		} else if (itemId == 40297) { // 91Famulet
			if (pc.getX() >= 32706 && pc.getX() <= 32710 && pc.getY() >= 32909
					&& pc.getY() <= 32913 && pc.getMapId() == 190) {
				isTeleport = true;
			}
		}

		if (isTeleport) {
			L1Teleport.teleport(pc, item.getItem().get_locx(), item.getItem()
					.get_locy(), item.getItem().get_mapid(), 5, true);
		} else {
			pc.sendPackets(new S_ServerMessage(79)); // \f1何も起きませんでした。
		}
	}

	private boolean writeLetter(int itemId, L1PcInstance pc, int letterCode,
			String letterReceiver, byte[] letterText) {

		int newItemId = 0;
		if (itemId == 40310) {
			newItemId = 49016;
		} else if (itemId == 40730) {
			newItemId = 49020;
		} else if (itemId == 40731) {
			newItemId = 49022;
		} else if (itemId == 40732) {
			newItemId = 49024;
		}
		L1ItemInstance item = ItemTable.getInstance().createItem(newItemId);
		item.setCount(1);
		if (item == null) {
			return false;
		}

		if (sendLetter(pc, letterReceiver, item, true)) {
			saveLetter(item.getId(), letterCode, pc.getName(),
					letterReceiver, letterText);
		} else {
			return false;
		}
		return true;
	}

	private boolean writeClanLetter(int itemId, L1PcInstance pc, int letterCode,
			String letterReceiver, byte[] letterText) {
		L1Clan targetClan = null;
		for (L1Clan clan : L1World.getInstance().getAllClans()) {
			if (clan.getClanName().toLowerCase().equals(letterReceiver
					.toLowerCase())) {
				targetClan = clan;
				break;
			}
		}
		if (targetClan == null) {
			pc.sendPackets(new S_ServerMessage(434)); // 受信者がいません。
			return false;
		}

		String memberName[] = targetClan.getAllMembers();
		for (int i = 0; i < memberName.length; i++) {
			L1ItemInstance item = ItemTable.getInstance().createItem(49016);
			item.setCount(1);
			if (item == null) {
				return false;
			}
			if (sendLetter(pc, memberName[i], item, false)) {
				saveLetter(item.getId(), letterCode, pc.getName(),
						memberName[i], letterText);
			}
		}
		return true;
	}

	private boolean sendLetter(L1PcInstance pc, String name,
			L1ItemInstance item, boolean isFailureMessage) {
		L1PcInstance target = L1World.getInstance().getPlayer(name);
		if (target != null) {
			if (target.getInventory().checkAddItem(item, 1) == L1Inventory.OK) {
				target.getInventory().storeItem(item);
				target.sendPackets(new S_SkillSound(target.getId(), 1091));
				target.sendPackets(new S_ServerMessage(428)); // 手紙が届きました。
			} else {
				if (isFailureMessage) {
					// 相手のアイテムが重すぎるため、これ以上あげられません。
					pc.sendPackets(new S_ServerMessage(942));
				}
				return false;
			}
		} else {
			if (CharacterTable.doesCharNameExist(name)) {
				try {
					int targetId = CharacterTable.getInstance()
							.restoreCharacter(name).getId();
					CharactersItemStorage storage = CharactersItemStorage
							.create();
					if (storage.getItemCount(targetId) < 180) {
						storage.storeItem(targetId, item);
					} else {
						if (isFailureMessage) {
							// 相手のアイテムが重すぎるため、これ以上あげられません。
							pc.sendPackets(new S_ServerMessage(942));
						}
						return false;
					}
				} catch (Exception e) {
					_log.log(Level.SEVERE, e.getLocalizedMessage(), e);
				}
			} else {
				if (isFailureMessage) {
					pc.sendPackets(new S_ServerMessage(109, name)); // %0という名前の人はいません。
				}
				return false;
			}
		}
		return true;
	}

	private void saveLetter(int itemObjectId, int code, String sender,
			String receiver, byte[] text) {
		// 日付を取得する
		SimpleDateFormat sdf = new SimpleDateFormat("yy/MM/dd");
		TimeZone tz = TimeZone.getTimeZone(Config.TIME_ZONE);
		String date = sdf.format(Calendar.getInstance(tz).getTime());

		// subjectとcontentの区切り(0x00 0x00)位置を見つける
		int spacePosition1 = 0;
		int spacePosition2 = 0;
		for (int i = 0; i < text.length; i += 2) {
			if (text[i] == 0 && text[i + 1] == 0) {
				if (spacePosition1 == 0) {
					spacePosition1 = i;
				} else if (spacePosition1 != 0 && spacePosition2 == 0) {
					spacePosition2 = i;
					break;
				}
			}
		}

		// letterテーブルに書き込む
		int subjectLength = spacePosition1 + 2;
		int contentLength = spacePosition2 - spacePosition1;
		byte[] subject = new byte[subjectLength];
		byte[] content = new byte[contentLength];
		System.arraycopy(text, 0, subject, 0, subjectLength);
		System.arraycopy(text, subjectLength, content, 0, contentLength);
		LetterTable.getInstance().writeLetter(itemObjectId, code, sender,
				receiver, date, 0, subject, content);
	}

	@Override
	public String getType() {
		return C_REQUEST_ITEM_USE;
	}
}
